大数据之——(分布式集群式) VWare、Ubuntu、CentOs、Hadoop安装配置
之前我写了一篇《大数据之——VWare、Ubuntu、CentOs、Hadoop安装配置》,但是分布式集群的安装配置方式没怎么讲,而且伪分布式和分布式的关系也没讲清楚,两个方式堆积在一起十分臃肿。
所以我重新修改了两篇文章,修改了第一篇并写成《大数据之——(伪分布式的) VWare、Ubuntu、CentOs、Hadoop安装配置》:大数据之——(伪分布式的) VWare、Ubuntu、CentOs、Hadoop安装配置_vmware大数据hadoop-CSDN博客,另外增加这一篇《大数据之——(分布式集群式) VWare、Ubuntu、CentOs、Hadoop安装配置》,认真详细避坑式讲解这两个的区别以及安装配置方式。
一、大数据是啥?
大数据细分的话要比我之前学的前后端软件开发涉及的切面太多太多,单说那专业课就有三四个,又是什么大数据采集与预处理、大数据分布式并行处理、python大数据分析,上了一周课我也没整明白老子到底在学些什么。
1、大数据的概念
看过不少视频后,我总结了大数据简单来看是干什么的:
—— 《就是将海量无穷多的数据,进行【采集】、【存储】、【计算分析】》
;
- 打个比方,你大学有个作业是《研究大学生对心理健康了解程度分析》,那是不是要用到大量数据?那就需要取采访或者填调查表,这就是【采集】(关心得比较少)
- 然后如果你要查全中国大学生的数据,几十亿人口,这些数据可不是你那个烂电脑能存储得下的,就需要用到大数据的【存储】
- 接下来,你希望统计你这个调查数据里“男生的比例”、“女生的比例”、“20-23岁之间的比例”,几亿条数据里你要一点一点人工统计吗?肯定不行,那就得靠大数据来【计算分析】
2、大数据需要解决的核心问题(含我们要学哪些技术栈)?
那么针对大数据是什么,我们可以知道后面我们需要学习的内容,也就是大数据需要解决什么问题:(简单了解,不要去记,现在记住以后也会忘)
因为我们知道大数据主要就是处理【存储】和【计算分析】(【采集】先不管),那么:
;
(1)数据的存储:分布式存储
离线数据(历史的、已存在的)存储:HDFS、HBase、Hive
实时数据(未来的、还不存在的)存储:Kafka
;
(2)数据的计算:分布式计算
离线数据计算:MapReduce、Spark Core、Flink DataSet
实时数据计算:Storm、Spark streaming、Flink DataStream
;
这里举个例子什么是离线和实时:
——比如你浏览过的所有黄色网站信息、你发出的所有微信消息,这就是一些离线的数据;
——那比如天猫双十一要实时计算出未来每小时成交量和用户热度...这些数据还不存在,但是要预先为这些数据设计对应的存储方式、计算模型,这就是实时数据
3、数据分析的基本流程(简单了解,不重要)
那么有个大概理念之后,我们肯定还是一头懵:那我们到底该怎么用大数据,怎么个大致流程啊?
简单一句话,数据分析流程就是:数据从哪来的?数据最后到哪去?
核心步骤是:【采集】、【处理】、【分析】、【应用(包括数据展现、撰写报告)】
【采集】:通常分为“从无到有”和“从有到无”两种数据
前者就是好比你买了一个传感器收集气象数据、调查填表......原本没有你要的数据,自己产出
后者就是已有的,比如b站、学习强国爬虫获取他们网站的数据、一些公开数据源
;
【处理】:准确来说是【数据预处理】,主要包括(数据清洗、数据转化、数据提取、数据计算),最终将原本文字、视频、音频这些格式乱七八糟的数据,预处理成一种干净规整的结构化数据。
;
【分析】:运用算法和分析工具,对“预处理”过的数据进行分析,提取有价值的部分,相当于一个过滤的过程吧
;
【数据展现】:这里就可以应用我们处理过的数据了,那么因为很多人都是白痴,看不懂文字、表格数据,人们更倾向于看可视化的统计图。
;
【撰写报告】:然后还有报告,报告是针对这个数据分析做出的结果汇报,比如根据2021年高考志愿大数据分析,清华北大是近几年最容易、最少人报的民办大专(我开玩笑的,清华北大校友别网暴我)
4、分布式、集群概念
那老是提到什么分布式分布式,分布式是个啥玩意?集群又是啥玩意?
简单来说:【分布式】就是多个服务器分工干多个事;【集群】就是多个服务器干同一件事。
5、【总结】
简单看一下,学习大数据将要了解、涉及到的各个模块、各个技术栈
二、虚拟机安装
1、介绍虚拟机是啥
相信各位学过Linux的、或者对大学考试作弊深有研究的掉毛们,对虚拟机肯定不陌生,那么既然我们要学习大数据分布式处理,那就需要模拟多个服务器来实现,那一个计算机能配置成一个服务器,那我们总不能把自己的本机电脑配成服务器吧?而且我们一台电脑也没办法整多个服务器出来,那就需要虚拟机来配置构建服务器,来模拟代替一个真正的计算机。(虚拟机就是虚拟的一台计算机)
这里还要提一下硬件虚拟化技术,简单了解即可,我们都知道虚拟机并不是真的一个物理上存在的计算机机器,只是对计算机硬件的一个虚拟化技术 “变出” 这么多类似计算机的机器;
那么阿里云也同理,全中国的开发者基本都会用到阿里云的服务器,但是每个账号都能拥有几个阿里云的服务器,阿里云真的有那么多台硬件服务器吗?当然不是,这也只是阿里公司现有那几台硬件服务器基础上,通过硬件虚拟化技术 “变出” 的无穷无尽的 “云服务器”
市面上的虚拟机很多种,其中最出名的就是【Oracle】和【VMware】
那么我结合大学里教的课程、以及b站所有大数据课程来看,推荐所有人安装【VMware】,因为大家都在用这个。
2、VMware虚拟机安装步骤
步骤超简单,有手就行,跟着我的步骤不管以后VMware更新到第几代,界面变成啥样,找我做的就没错
1)点击进入VMware官网
VMware by Broadcom - Cloud Computing for the Enterprise
2)找到【搜索框】,然后搜索【Desktop Hypervisor】
3)然后点击【Products】,然后点击下面第一条链接,跳转后点击【Desktop Hypervisor】,然后一直点下去
4)通常这个时候就会跳出登录界面,没有登录过的就去注册一下,登录了的就直接登录,这里登陆注册步骤我就不想教了,都不用看教程白痴都会的,看不懂英文就“网页翻译”去
5)然后登录完就会自动跳到这界面,点击【My Downloads】,然后一直找找到【VWare Workstation Pro】,每一年界面可能都会变,但是虚拟机的名字【VWare Workstation Pro】不会变,找到他点击就行
6)最后找到【VWare Workstation Pro xxx(版本号) for Personal Use(Windows)】
(我的电脑是window x64位的就选这个,你们的不是的话就问一下网上你们的电脑适配什么),
展开后随便找一个版本点击就可以下载了(一般选第一个最新的就行)
在浏览器下载能看到已经下载了
(这里因为我把它移到别的位置了,所以显示“已删除”,图我懒得重新截图,将就看吧)
6)下载好之后点击安装,就跟正常安装软件一样,一直点下一步就行,图我都懒得截了,将就看别人的吧,不需要看清里面的字,就无脑照着大概点下去就行
(只是需要注意,安装的路径如果想安装到自定义的地方,请路径中不要带有“中文”、“空格”...等特殊符号)
这里可以更换安装路径,我个人是安装到 “F:/VWareWorksation17” 这个目录下
7)最后检查【虚拟网卡】有没有安装上,电脑之所以能上网就是因为有网卡,那么虚拟机同理,安装VMware正常情况是会自动安装上【VMnet1】和【VMnet8】这两个虚拟网卡的,如果没有的话,虚拟机就不能上网,因此要检查一下
点击设置——>网络和Internet——>高级网络设置——>更多网络适配器选项
;
如果你的window界面跟我的不一样,也可以【Win + R】输入【ncpa.cpl】也会弹出来
;
如果发现有【VMnet1】和【VMnet8】这两个虚拟网卡就正常,没有的话就把VMware整个卸载,然后重新按上面步骤安装
三、Ubuntu或CentOs系统
好了,现在有了虚拟机,那我们都知道,如果你有一台电脑,没有Windows系统......那还玩个鸡毛啊?还不如卖废铁丢掉。那么虚拟机同理,只不过这里我们大数据需要配置的是服务器,服务器需要的操作系统是Linux而不是Windows,所以我们就要给VWare虚拟机再准备好Linux系统。
这里就需要介绍一下Linux系统,这个系统其实是一个开源代码项目,就好比我们写完的一些网站、软件项目,也可以放开源网站给别人用,那么别人就可以基于你的项目的基础再进行修改完善。那么【Ubuntu】和【CentOs】就是这么个玩意,是后人在基于Linux源码的基础上,开发出的自己的新的Linux操作系统,这样的操作系统有千千万万个,其中最多人用的就是【Ubuntu】和【CentOs】。
简单来说,就是Linux是【Ubuntu】和【CentOs】的爹,那么【Ubuntu】和【CentOs】就带着Linux的基因,虽然它两有一些区别,但是本质都是【Linux系统】!!!我们就是要给VWare虚拟机装上【Ubuntu】或【CentOs】。
1、Ubuntu系统安装配置
首先进入官网,三个网址看个人喜好(前两个是官网国外网址,所以下载速度很慢,第三个推荐)
(较慢)英文版官网:https://ubuntu.com/download/desktop
(较慢)中文版官网:https://cn.ubuntu.com/download/desktop
(最快)清华大学镜像下载网站:清华大学开源软件镜像站 | Tsinghua Open Source Mirror
1)点击下载
(英文版官网,等到明年你毕业了就可以安装完了)
(中文版官网,等到明年你毕业了就可以安装完了)
(清华大学镜像下载网站,比你🦌的速度还快)
进入镜像网站直接搜索ubuntu,然后选择ubuntu-releases
;
进入页面后,选择自己需要的版本,我选择的是“24.04.1/”
选中之后点击,进入下个页面。
;
进入最终下载页面,选择“ubuntu-24.04.1-desktop-amd64.iso”下载保存即可。(注:文件后缀名一定要是iso)
2)在VWare安装Ubuntu
(上面其实是为了演示怎么安装Ubuntu,其实本人因为课堂老师要用的是20.04.5版本的,所以被迫无奈还是选择用老师发的压缩包了哈哈,但是至少我是会怎么下载Ubuntu的)
这里下载好的Ubuntu你可以随便放个位置,只要你以后记得在哪就行,然后有一个【重点问题】!!!有的人的电脑显示这个iso文件是一个“光盘图标”,有的可能是一个压缩包,尤其是那些用老师百度网盘发的压缩包的,它们是一个玩意!!!记住!!!!【不要解压!!!】【不要解压!!!】【不要解压!!!】
然后回到VWare,我们点击打开VWare,然后点下面位置来【创建一个虚拟机】
用最简单的方式创建,跟我图片一步一步点下去就行
通常VWare会自动扫描整个电脑,如果你有下载好Linux系统(iso文件),它就会自动找到,比如我这里Ubuntu和CentOs的光盘文件他都自动找到,如果没有的话,你也可以自己手动找到Ubuntu的文件地址,添加进去
然后起名、设置密码啥的
然后进入页面之后,直接Skip跳过,然后一直点右上角的Next就行
注意弹出弹窗让你更新的话尽量别更新,容易不稳定
然后可能我们会发现左边的侧边栏图标很少,点击左下角菜单,把常用的【终端】和【设置】已过去就行
右键图标,点【Add to Favorites】就可以移过去
【拓展】
终端除了在这里点图标打开,还可以【Ctrl + Alt + T】打开
另外以后如果创建的虚拟机比较多,那么就可以新建文件夹管理一下,把你的虚拟机移进去就行了
2、CentOs系统的安装配置(重点,后面集群式都用CentOs讲解)
那么根据黑马程序员、尚硅谷的视频,它们都是以CentOs系统来讲大数据课程的,那也讲一下CentOs的安装配置过程
1)点击下载
首先到下面阿里云的镜像网站中去下载CentOs的系统光盘文件,还是一样,一定要选后缀是.iso的!!!
网址:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云
2)在VMware安装CentOs
然后跟上面安装Ubuntu的步骤一样,只不过是把“安装程序光盘映像文件”换成CentOs的
想关机的话就这样两种方式
四、FinalShell远程连接操作
这里就涉及到了【分布式集群】的操作,如果是正常跟着老师课程 “用一台虚拟机” 来学大数据的就可以不用看下去了,去看我这一篇《大数据之——(伪分布式的) VWare、Ubuntu、CentOs、Hadoop安装配置》:大数据之——(伪分布式的) VWare、Ubuntu、CentOs、Hadoop安装配置_vmware大数据hadoop-CSDN博客
记住了:【分布式集群】大数据并行操作就是用多台虚拟机模拟集群服务器节点;【伪分布式集群】大数据并行操作就是用一台虚拟机模拟多台服务器节点的效果。
那么【FinalShell】就是服务于【分布式集群】的,因为当我们要通过命令操作多台服务器节点的时候,总不可能同一个命令点开那么多个虚拟机一个一个复制粘贴来操作吧?那么【FinalShell】的作用就是:一个【FinalShell】连接多个虚拟机,通过在【FinalShell】输入命令直接操控多个虚拟机的Linux系统。
简而言之,FianlShell就是一个远程操控我们虚拟机的Linux系统的第三方软件
1、下载
网址是:FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.5.9,更新日期2024.9.26 - FinalShell官网
2、安装
3、连接虚拟机的Linux系统
1)CentOs的连接
首先回到VMware的用了CentOs系统的虚拟机,右键点击【Open Terminal】,就是打开这个虚拟机的终端
然后输入命令【ifconfig】,这个命令就类似window系统的ipconfig,就是查询这个虚拟机的ip地址
然后再打开FinalShell,点击左上角的“文件夹”小图标,然后再点击弹窗里左上角的小图标,点击【SSH连接(Linux)】
然后输入刚刚查到的虚拟机的ip地址,以及这个虚拟机的用户名、密码
创建成功后,就会显示在弹窗,此时我们双击它,就可以开始发起连接
就会弹出弹窗,这是连接信息已经发送过来,我们只需要点击【接受并保存】
最后检测是否连接成功,分别在FinalShell跟VMware虚拟机中输入【ls】这个命令,如果返回的结果一样的话,就是连接成功
2)Ubuntu的连接
Ubuntu连接FinalShell有点不太一样,我们首先打开终端,输入【ifconfig】后提示:Command 'ifconfig' not found,but can be installed with:sudo apt install net-tools。表示刚安装的Ubantu系统中没有安装net工具包
输入命令【sudo apt install net-tools】执行后即可安装
然后再输入ifconfig查看所有网络接口的信息
这时还没完!Ubantu一般会默认安装openssh-client,但是有的系统经常会未安装openssh-server。此时直接用FinalShell连接Ubuntu可能会连接失败。
那么就需要在虚拟机终端输入命令【sudo apt install openssh-server】安装ssh服务器
输入命令【sudo apt install openssh-client】安装ssh客户端
然后输入命令 【sudo gedit /etc/ssh/ssh_config】配置ssh客户端,去掉PasswordAuthentication yes前面的#号,以及端口号22前面可能有#,有的去掉。修改完后摁【Ctrl + S】保存后,点“叉叉”退出。
然后输入命令【sudo gedit /etc/ssh/sshd_config】配置ssh服务器,在PermitRootLogin prohibit-password加一句【PermitRootLogin yes】(加了这个后在finalshell等可以直接root连接虚拟机,用root连接才可以上传文件),以及端口号22前面可能有#,有的去掉。修改完后摁【Ctrl + S】保存后,点“叉叉”退出。
最后执行【sudo /etc/init.d/ssh restart】 重启ssh服务
然后现在,就是跟CentOs的操作一样
然后再打开FinalShell,点击左上角的“文件夹”小图标,然后再点击弹窗里左上角的小图标,点击【SSH连接(Linux)】
然后输入刚刚查到的虚拟机的ip地址,以及这个虚拟机的用户名、密码
创建成功后,就会显示在弹窗,此时我们双击它,就可以开始发起连接
然后就会弹出弹窗,这是连接信息已经发送过来,我们只需要点击【接受并保存】
最后检测是否连接成功,分别在FinalShell跟VMware虚拟机中输入【ls】这个命令,如果返回的结果一样的话,就是连接成功
五、创建集群式服务器节点
既然我们要模拟多服务器的节点的集群式大数据分布处理,那么就得创建多个虚拟机当成多个节点
1、设置统一的网段和网关
想象一下,如果你有一个大家庭,家里有很多房间(就像集群中的虚拟机),每个房间都需要和外界通信。这时候,你需要设置一个统一的“门”(网关)来管理所有的进出。
那么设置网关的好处:
统一管理和控制:统一的网关可以对所有进出集群的流量进行统一管理和控制,(所有的进出都通过这个门,只需要守住这个门就能知道谁进来了、谁出去了,管理起来很方便。)
稳定性和可预测性:使用静态IP地址和统一网关可以避免因动态IP分配导致的地址冲突和变化。(如果每个房间都有自己的门,那么可能会有门坏了或者位置变了的情况,但如果只有一个门,就不容易出问题。)
负载均衡:在分布式集群中,网关可以均衡分配流量到不同的后端服务上,提高系统的性能和可用性。
避免与真实主机IP网段冲突:在虚拟化环境中,虚拟机的IP和网关可以自定义配置,但需要避免与真实主机所在的IP网段重复,以确保网络配置的成功。(如果每个房间都有自己的门,可能会和邻居家的门冲突,但如果只有一个门,就不会出现这种情况。)
首先,我们需要将我们的网段设置为:【192.168.88.0】,网关设置为:【192.168.88.2】
到了虚拟机点击【编辑】的【虚拟网络编辑器】
按步骤一步一步点下去......
2、克隆虚拟机,创建分布式集群
然后和分布式集群,肯定得有多个服务器节点啊,那我们就得创建多个虚拟机
当然直接克隆创建的第一个虚拟机就行了
找上面步骤创建好3台node1、node2、node3虚拟机之后,为了方便管理不那么乱,我们还可以设置文件夹统一管理
然后我们再自定义分配一下三个节点的内存大小,node1以后要经常用那就分配大一点,其他两个可以少一点
3、对三台虚拟机完成主机名、固定IP、SSH免密登陆等系统设置
——【针对CetOs系统的】
首先我们点击【node1】【node2】【node3】都开机,弹出这个弹窗的话我们点否就行
然后三个虚拟机都打开终端,如图所示:
注意我们需要切换一下用户身份,因为跟我们windows系统一样,只有【root】管理员身份才有特权去修改、读取文件,很多权限会限制普通用户操作
输入【su -】然后验证密码(正常输入完回车就行,看不到是正常的),然后直到看到前面用户名变成【root】
同样的操作对另外两个虚拟机也做一遍
1)第一:修改主机名
现在改我们 “用户名右边的那个主机名(hostname)”
输入【hostnamectl set-hostname [节点主机名]】,比如node1就【hostnamectl set-hostname node1】
然后输入【vim /etc/sysconfig/network-scripts/ifcfg-ens33】,这个命令意思是使用【vim】这款编译器编辑修改【/etc/sysconfig/network-scripts/ifcfg-ens33】这个文件
然后将这几个地方修改一下,不想自己敲可以粘贴下面(虚拟机里复制是【Ctrl
+ Shfit + C】,粘贴【Ctrl + Shfit + V】)
......前面不改
BOOTPROTO="static"
......中间不改,直到最底下
IPADDR="192.168.88.101"
NETMASK="255.255.255.0"
GATEWAY="192.168.88.2"
DNS1="192.68.88.2"
然后输入【systemctl restart network】是重启配置,让配置生效
输入【ifconfig】(注意不是windows那个ipconfig)是查看网络配置是否成功
看到下面效果就是成功
同样的事对node2、node3也照做一遍
2)第二:配置主机名映射
需要做这两步:
在我们本机文件夹的这个路径下,编辑这个【hosts】,用记事本也行、用vscode也行,看个人习惯,我本人用的vscode编辑。将下面内容【复制进去并保存】。
192.168.88.131 node1 192.168.88.132 node2 192.168.88.133 node3
那么如果出现上图这种情况 “无法保持“hosts”权限不足......”,就说明我们当前用户没有权限修改文件,要修改一下这个文件的权限(通常C盘的电脑自带文件,普通用户都没有权限修改)
右键这个文件点击【属性】,然后点【安全】,点【编辑】
直接让所有身份的用户勾选上【修改】和【写入】的权限,然后点【应用】和【确定】
就可以有权限编辑并保存了
完成了Windows的hosts文件的配置,接下来再配置3台虚拟机的hosts的主机名配置
前面我们设置统一网段、网关的时候挺烦人的,一样的操作还得来回在三个虚拟机之间复制粘贴,而且有的老铁要是还没有配置好虚拟机跟本机的复制粘贴的话,还得手动敲
那这里我们还是用FinalShell直接连接三个虚拟机,然后再FinalShell上操作3个虚拟机的终端命令就行了(要是实在不想用的话,下面的Linux命令一台一台虚拟机地复制粘贴也可也,记得切换root管理员身份)
首先双击连接3个虚拟机,这是因为我们之前已经连接过,如果没有连接过的,对照我第四大点连接先。
;
然后连接上之后,修改它们的 “/etc/hosts” 这个路径的hosts文件,输入【vim /etc/hosts】进入到vim编辑界面,复制下面内容进去
(别忘了vim编辑器操作,摁【i】编辑,【Ctrl + Shift + V】粘贴,输入【:wq】是保存退出; 3台虚拟机都要执行这个操作)
192.168.88.101 node1 192.168.88.102 node2 192.168.88.103 node3
3)第三:配置SSH免密登录
输入指令【ssh-keygen -t rsa -b 4096】,然后一直往后回车,直到出现下图的那些图案
这个操作在FinalShell的3个虚拟机控制台都做一遍
输入【cd .ssh/】进入到ssh目录下,然后输入【ll】就能看到我们刚刚生成的SSH的私钥和公钥了
然后再分别到3台虚拟机里输入【ssh-copy-id [这个虚拟机的主机名]】
比如node1的就是【ssh-copy-id node1】,node2的就是【ssh-copy-id node2】
意思就是以后可以自己免密登录自己,3台虚拟机执行一样的操作,这样之后3台虚拟机直接就可以互相免密登录互通。
输入完下面根据提示输入yes、密码,回车结束
以后我们想要让一台虚拟机连接另一台,只需要输入【ssh [要连接的虚拟机的主机名]】就行了
比如node2想连接node1,直接【ssh node1】
退出连接登录就是【exit】
4)最后:创建hadoop用户
之前我们创建centOs系统的虚拟机的时候,用的是我们自定义名字的用户,但是这里有一点电脑基础的都知道,即使你在Windows系统里,C盘里有很多文件都是我们无法操作修改甚至阅读的,要用 “管理员终端” 执行命令才能操作,或者删文件的时候弹窗提示 “需要管理员权限才可删除”
这是因为管理员是电脑系统的最高权限的身份,Linux一样,root就是管理员,只有root身份才可以操作Linux根目录里的一些文件,但是我们不能一直用root来操作,因为他的权限很大,一旦用root不小心改了什么文件、误删了什么文件,那直接死定了
因此我们需要创建一个hadoop这么一个用户,然后给这个用户设定一定的权限,以后我们在学习大数据的时候用hadoop这个用户就可以有权限操作我们hadoop所需要的文件了,还不会随意更改操作别的重要文件。
简单一句人话,我们要创建一个hadoop用户,然后把刚刚root用户下配置SSH密钥的事全部重新再做一遍就行
首先创建hadoop用户,到FinalShell分别给3台虚拟机输入【useradd hadoop】
然后输入【passwd hadoop】给hadoop用户设置密码,如果提示 “无效的密码”,不用管,再输入一次就行了
(以后创建啥用户都是一样【useradd 用户名】,【passwd 用户名】)
然后我们从root用户切换成hadoop:【su - hadoop】
(想切换root用户就直接【su -】,切换指定用户就【su - 用户名】)
接下来就是把我们刚刚在root配置SSH免密登录的操作再做一遍,也就是 “第3)小点” 的内容
别忘了是3台虚拟机都做一遍,而且都要是以hadoop用户下做这些操作
然后现在用hadoop用户身份,也可也任意免密登录了
——【针对Ubuntu系统的】
1)第一:修改主机名、配置主机名映射
跟CentOs是一样的操作的,照着上面CentOs的“第一”、“第二” 步执行即可......
2)第二:创建hadoop用户
(可以像CentOs一样用FinalShell操作,只不过我在写这里的时候还没接触CentOs、FinalShell和分布式,所以现在我懒得再改了,你们讲究照着这样做吧)
如果你安装 Ubuntu 的时候不是用的 "hadoop" 用户,那么需要增加一个名为 hadoop 的用户。
首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户 :
sudo useradd -m hadoop -s /bin/bash
(这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell。)
【拓展】
Ubuntu终端复制粘贴快捷键: 在Ubuntu终端窗口中,复制粘贴的快捷键需要加上 shift,即粘贴是 ctrl+shift+v。
接着使用如下命令设置密码,可简单设置为 hadoop,按提示输入两次密码:
sudo passwd hadoop
可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题:
sudo adduser hadoop sudo
最后注销当前用户(点击屏幕右上角的齿轮,选择注销),返回登陆界面。在登陆界面中选择刚创建的 hadoop 用户进行登陆。
三台虚拟机都要这么做,可以直接在虚拟机上这么做,也可也用FinalShell,FinalShell的截图我就懒得演示了。
3)第三:更新apt
用 hadoop 用户登录后,我们先更新一下 apt,后续我们使用 apt 安装软件,如果没更新可能有一些软件安装不了。按 ctrl+alt+t 打开终端窗口,执行如下命令:
sudo apt-get update
如果没有下载配置vim编辑器的,请执行如下操作后再执行上面的命令,因为以后的【sudo命令】都要用到【vim编辑器】。
三台虚拟机都要这么做,可以直接在虚拟机上这么做,也可也用FinalShell,FinalShell的截图我就懒得演示了。
4)第四:安装SSH、配置SSH无密码登陆
一般Ubuntu系统是不会自动安装SSH的,前面我也在第四大点的第3小点讲述了要在Ubuntu系统安装SSH的步骤 ,如果跳过了的话没关系,这里我再演示一次:
输入命令【sudo apt install openssh-client】安装ssh客户端
然后输入命令 【sudo gedit /etc/ssh/ssh_config】配置ssh客户端
去掉PasswordAuthentication yes前面的#号,以及端口号22前面可能有#,有的去掉。
修改完后摁【Ctrl + S】保存后,点“叉叉”退出。
然后输入命令【sudo gedit /etc/ssh/sshd_config】配置ssh服务器
在PermitRootLogin prohibit-password加一句【PermitRootLogin yes】
(加了这个后在finalshell等可以直接root连接虚拟机,用root连接才可以上传文件)
以及端口号22前面可能有#,有的去掉。修改完后摁【Ctrl + S】保存后,点“叉叉”退出。
最后执行【sudo /etc/init.d/ssh restart】 重启ssh服务
安装了SSH之后,可以使用如下命令登陆本机:
ssh localhost
此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 hadoop,这样就登陆到本机了。
但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便。
首先退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:(一条一条的执行)
exit # 退出刚才的 ssh localhost
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
此时再用 【ssh localhost】
命令,无需输入密码就可以直接登陆了,如下图所示。
三台虚拟机都要这么做,可以直接在虚拟机上这么做,也可也用FinalShell,FinalShell的截图我就懒得演示了。
六、拓展——WSL
这个也是一个拓展知识,很多学校百分之一百不会教,这也不是重点,但是越老越多现代开发者在逐步抛弃使用虚拟机来操作Linux操作系统的方法,而采用WSL操作Linux,那我们最好也学一下,以免跟时代落后了。
1、WSL是啥玩意?
那这到底是是个啥玩意?简单一句话:【就是在Window系统上直接安装并操作Linux系统】,你可以不再下载一堆什么傻鸟虚拟机之类的东西,直接安装Linux系统到你的电脑,然后在电脑终端输入命令行就可以用了。
那么这里我就只用Ubuntu这个Linux系统来进行演示了
2、下载
3、安装并使用
现在在准备安装之前,先做这么几个操作,【Win + R】,输入【optionalfeatures】
弹出这个窗口之后,勾上【适用于Linux得Windows子系统】和【虚拟机平台】两个选项
点击确定之后,会要你重启,你就直接耐心重启一下
最好执行一下这个命令
然后我们回到微软商店此时Ubuntu如果已经下载好了,点击【打开】就可以开始安装
然后安装好之后就会弹出一个弹窗
这里依次输入账号(username)、密码(password,记住密码那里输入东西看不见是正常的,你只管输入完按回车就行了),然后一直回车,然后就成功安装好一个Ubuntu系统到你的window系统里了
那么这就是一个没有图形化界面、纯命令行操作的页面了,以后我们想要打开这个窗口的时候,正常在window搜索Ubuntu就可以打开了
当然还有一种打开方式就是用我们window终端来操作Ubuntu
我们右键开始按钮,点击【Window终端】
点击下面图标
然后就可以获得window终端窗口样式的Ubuntu界面了
七、Hadoop
1、这是啥玩意啊?
Hadoop是Apache软件基金会开发的分布式系统基础架构,用以提供:
- 分布式数据存储
- 分布式资源调度
- 分布式数据计算
为一体的整体解决方案。
这【三个功能】对应Hadoop里的【三个核心组件】:
那么对于我们大数据学习者而言,Hadoop就是一款分布式大数据操作的软件,它跟springboot、vue、pytorch这些一样,就是一个架构、一个框架,别人写好了底层代码我们直接用。
然后它可以部署到1台或者多台服务器节点上共同工作,个人或企业利用Hadoop就可以构建大型的服务器集群,完成海量的数据存储和计算。
【拓展(大数据方向面试会问到的内容)】
Hadoop1、Hadoop2、Hadoop3的版本发展变化:
2、前期工作
这里如果是【CentOs系统】的可以忽略,直接到第3小点的【安装Java环境】
;
如果用的是【Ubuntu系统】的,就要做配置复制粘贴这几步,因为CentOs可以直接在虚拟机和主机之间复制粘贴,即使不可以也可用FinalShell进行复制粘贴,但是Ubuntu不行直接复制粘贴。
需要做2步来进行你自己物理计算机跟虚拟机之间文件传输的办法:
- 1、你可以采用安装【VMtools】来进行一个计算机跟虚拟机之间复制粘贴的操作
- 2、你也可以开启【共享文件夹】来指定虚拟机和计算机的某个文件夹之间进行文件共享传输
【VMtools安装】
安装VMtools,这个软件可以帮助我们将物理计算机跟虚拟机之间进行文件传输
首先如果你的vmware里点击上面【虚拟机】有这个【安装VMware Tools(T)】你就点他
如果跟我一样是灰色的没法点,那么右键你的虚拟机,点击【设置】,记得给虚拟机先关机!!!
点【CD/DVD】,然后点【使用ISO映像文件】
然后导入【linux.iso】这个文件,这个文件在你安装VMware这个软件的目录的根目录下
然后点到【选项】,点【VMware Tools】勾选【将客户时间与主机同步】
然后重启虚拟机,就能看到多了一个光盘
打开光盘文件,其中有一个名为 VMwareTools…tar.gz 的压缩包,将这个压缩包移动到你想解压的目录(例如 /home/Documents/VMTools)
然后点击这个压缩包,右键选择“extract here”解压到当前目录
然后进入到 vmware-tools-distrib 目录,右键点【Open in Terminal】用终端打开
输入 sudo ./vmware-install.pl 回车,接着就是输入 yes 再一直回车了。
然后再重启虚拟机,就发现可以直接复制粘贴了
【方法二】
点击【设置】,点击【选项】,点击【共享文件夹】,然后勾选【总是启用】
;
然后在下面添加你要共享的文件夹在计算机哪个位置
;
这里建议大家创建一个教【shared_folders】的文件夹,专门用于与虚拟机共享的
;
然后,【Ctrl + Alt + T】打开虚拟机的终端,输入【ls /mnt/hgfs】就能看到我们共享的那个文件夹
这个命令的意思就是【列出根目录下/mnt目录下/hgfs目录下的所有文件】,我们的共享文件夹就是在Linux系统里的这个地方
;
如果没有,就说明共享文件夹失败,就可能是跟Linux系统的Open-VM-Tools的安装和配置有关
首先执行输入【sudo apt-get install open-vm-tools-dkms】安装Open-VM-Tools
然后执行这个命令【sudo vim /etc/systemd/system/mnt-hgfs.mount】
如果报错:sudo: vim: command not found,就说明系统缺少
vim
编辑器,而sudo
命令需要用到编辑器来编辑文件执行下面两个命令安装vim
sudo apt-get update sudo apt-get install vim
然后再执行【sudo vim /etc/systemd/system/mnt-hgfs.mount】
然后就会跳转到vim编辑器,这是一个执行sudo命令的地方
进去之后,先摁【i】进入编辑模式(否则摁 什么键盘都无效),然后将这段命令复制粘贴进去
[Unit] Description=VMware mount for hgfs DefaultDependencies=no Before=umount.target ConditionVirtualization=vmware After=sys-fs-fuse-connections.mount [Mount] What=vmhgfs-fuse Where=/mnt/hgfs Type=fuse Options=default_permissions,allow_other [Install] WantedBy=multi-user.target
然后摁【Esc】退出编辑模式,然后直接输入【:wq】保存,摁下【回车】退出
ss
最后执行下面两句命令,开启共享文件夹服务
sudo systemctl enable mnt-hgfs.mount sudo systemctl start mnt-hgfs.mount
重现检查【ls /mnt/hgfs】,就会发现有了共享文件夹
3、Hadoop安装(这一篇仅讲述分布式集群的)
Hadoop的安装方式有三种,分别是单机模式,伪分布式模式,分布式模式。
- 单机模式:单机模式:Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
- 伪分布式模式:(说人话就是:一台虚拟机模拟多个服务器节点)Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
- 分布式模式:(说人话就是:多台虚拟机显示集群服务器的效果)使用多个节点构成集群环境来运行Hadoop。
(1)在集群上分布式安装Hadoop,请参考:
Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS(2)使用Docker搭建Hadoop分布式集群,请参考实验室博客文章《使用Docker搭建Hadoop分布式集群》。
到此为止,Hadoop的安装指南已经结束,如果想学习第3章《Hadoop文件系统》,请参考第3章的学习指南:
大数据技术原理与应用 第三章 学习指南
——【CentOs】系统演示
【安装Java环境】
这里要注意尽量用1.8版本的JDK!!
可以选择到官网下载JDK软件: Java Downloads | Oracle
在弹出的页面中输入Oracle的账户密码即可下载(如无账户,请自行注册注册是免费的)
或者我已经把 JDK1.8 的安装包【jdk-8u162-linux-x64.tar.gz】放在了百度云盘
通过网盘分享的文件:jdk-8u162-linux-x64.tar.gz
链接: https://pan.baidu.com/s/1dRVkEHh8afHsdS3CAQFjQg?pwd=4zgt 提取码: 4zgt
接下来总共要做这么几步:
那么我们直接用FinalShell操作,连接3台虚拟机之后,输入【mkdir -p /export/server】命令
意思是创建【/export/server】这么个路径、文件夹,以后我们主机跟虚拟机之间的文件传输都放这(3个虚拟机执行同样的操作)
然后在FinalShell输入【rz】,就可以把本机的文件上传到虚拟机了,我们就是要把刚刚下载的JDK上传到虚拟机
用【ll】或【ls】都可以查到我们的文件已经上传了
然后解压我们的JDK到【/export/server/】这层路径下,切记别搞错了
输入下面命令
tar -zxvf [该文件的全名] -C [你想解压的地方]
# 比如:tar -zxvf jdk-8u162-linux-x64.tar.gz -C /export/server/
cd进入【/export/server/】这层路径下,检查可以发现jdk文件已经解压安装成功
然后因为这个名字太长了,在CentOs系统可以通过【ln -s 原文件名字 新名字】的方式建立【软连接】,也就是用你喜欢的名字代替连接到这个文件。
那我们就可以把 “jdk1.8....” 这个文件名连接上简短的 “jdk”:【ln -s jdk1.8.0_162 jdk】
然后输入【vim /etc/profile】来修改一下profile文件,把下面的代码复制粘贴进去并保存
#编辑/etc/profile文件
export JAVA_HOME=/export/server/jdk
export PATH=$PATH:$JAVA_HOME/bin
输入【source /etc/profile】重启配置生效
但是仅仅配置好java的jdk环境变量还不够,我们还需要把【jdk的bin路径下的java】给它软连接到【/usr/bin下的java】
首先先删除CentOs系统自带的java,这个不是我们要的java,输入【rm -f /usr/bin/java】
然后输入【ln -s /export/server/jdk/bin/java /usr/bin/java】
然后再输入【java -version】和【javac -version】就可以看到java已经全局配置好了
然后我们将同样的操作弄到node2和node3上,但是我们其实可以不用把【上传、解压】这些步骤再到node2、node3再做一遍,只需要在node1把【jdk安装包】复制粘贴解压过去就行
首先在node1执行【cd /export/server】进入 /export/server 路径下,然后【ll】查看一下我们【jdk安装包全名】
然后要确保node2、node3都执行过【mkdir -p /export/server】,都有 /export/server 这层路径
然后分别执行下面两个命令,把jdk移过去node2、node3
scp -r jdk1.8.0_162 node2:`pwd`/
scp -r jdk1.8.0_162 node3:`pwd`/
如果出现这种情况,可能是太久没有执行命令,FinalShell自动退出连接虚拟机了,重新连接一下虚拟机,然后报错提示这里直接输入【yes】就行
执行了这个命令之后,不管你node2、node3【~】home目录下有没有jdk的文件,都可以直接一步安装进你的【/export/server】路径下
然后就要分别到node2、node3,把从 “给jdk软连接” 一直到 “给/export/server/jdk/bin/java软连接” 的所有操作都做一遍,直到输入【java -version】和【javac -version】看得到java版本信息。
如图所示:
【关闭防火墙和SELinux】
集群化节点之间需要通过端口互相通讯,他们占用各自的端口进行网络通讯,为了避免防火墙堵塞了他们的端口、出现网络不通的问题,我们可以简单的在集群内部关闭防火墙
三台机器分别执行这两句命令,就关闭防火墙了
systemctl stop firewalld
systemctl disable firewalld
Linux有一个安全模块:【SELinux】,用以限制用户和程序的相关权限,来确保系统的安全稳定在当前,我们只需要关闭SELinux功能,就能避免导致后面的软件运行出现问题
三台机器都要执行。首先我们执行【vim /etc/sysconfig/selinux】,编辑SELinux配置
然后把【SELINUX=enforcing】改成【SELINUX=disabled】
然后输入【init 6】重启。(【init 0】是关机)
重新开启连接之后,输入【systemctl status firewalld】就能看到已经是关闭状态
【配置时区并自动同步】
找下面步骤执行就行:
【yum install -y ntp】下载ntp插件
【date】是查看虚拟机时间
分别执行【rm -f /etc/localtime】和【ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime】
【ntpdate -u ntp.aliyun.com】用ntp连接阿里云的网络时间,自动同步更新准确时间
【systemctl start ntpd】和【systemctl enable ntpd】设置这个自动同步的功能开机自启,并一直保持运行
最后最后最后,我们做了这么多配置,养成【拍摄快照】的习惯,这样就不会突然因为自己的不当操作导致前功尽弃。。。。。。
【安装hadoop】
去这个清华大学的中国镜像安装网站: Index of /apache/hadoop/common
直接自己选一个安装
安装前提要:
区别于伪分布式的是,要知道分布式集群的服务器确实是需要我们手动配置各个节点的角色分配的
那么这里我们前面设置好的node1这个虚拟机节点就担任最主要的角色,承载“NameNode”、“DataNode'”、“SecondaryNameNode”三个角色的三个进程,其他两个只用承担“DataNode”任务
1、在node1上安装hadoop
用【root】身份登录
我这里一登陆就是root了,如果你的是别的用户身份,输入【su -】或【sudo -】就能切换回root身份 了
将hadoop压缩包上传虚拟机,并解压到【/expert/server】路径中
上传
;
;
解压:【tar -zxvf [你的hadoop压缩包路径名] -C /export/server/】
构建软连接,因为 “原hadoop文件名” 可能很长(hadoop-3.3.1-...)我们把它简化成就叫 “hadoop”,方便以后查找(相当于创建了一个 “快捷方式”)
ln -s [你的hadoop目录路径全名] [hadoop]
2、在node1配置hadoop
接下来我们要配置hadoop分布式配置,跟伪分布式的配置步骤大差不差 ,只不过多了一个配置【workers文件】
这里一定要记住,接下来我们所有的配置文件的操作都来自于hadoop安装目录下的【etc/hadoop】下的,也就是【/export/server/hadoop/etc/hadoop】
;
如果是【/export/server/hadoop】就错了!!!
首先配置【workers】文件,
“cd进入” hadoop的配置文件目录:【cd /export/server/hadoop/etc/hadoop】
然后【vim workers】编辑workers文件
注意!!!!一定要是在【/export/server/hadoop/etc/hadoop】路径下
不然的话,就只是在【/export/server/hadoop】路径下新建了一个worker文件,里面是没有内容的!!!不是配置文件,记得删掉
;
打开【workers】文件之后,别忘了摁【i】编辑
然后删掉第一行的那句 “localhost”,然后输入:
node1 node2 node3
然后摁【Esc】,输入【:wq】摁回车退出
然后配置【hadoop-env.sh】文件
注意!!!!还是一定要是在【/export/server/hadoop/etc/hadoop】路径下
然后再【vim hadoop-env.sh】,输入下面内容:
export JAVA_HOME=/export/server/jdk export HADOOP_HOME=/export/server/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HAADOOP_LOG_DIR=$HADOOP_HOME/logs
然后配置【core-site.xml】文件
注意!!!!还是一定要是在【/export/server/hadoop/etc/hadoop】路径下
;
上面的简单看看就好,反正你只管复制粘贴配置就行了
【vim core-site.xml】
然后把内容塞到下面最底部 (如果有一个<configuration></configuration>标签了,就删掉把这整个替换过去)
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> <description></description> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> <description></description> </property> </configuration>
然后是【hdfs-site.xml】
注意!!!!还是一定要是在【/export/server/hadoop/etc/hadoop】路径下
【vim hdfs-site.xml】
<configuration> <property> <name>dfs.datanode.data.dir.perm</name> <value>700</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/data/nn</value> <description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description> </property> <property> <name>dfs.namenode.hosts</name> <value>node1,node2,node3</value> <description>List of permitted DataNodes.</description> </property> <property> <name>dfs.blocksize</name> <value>268435456</value> <description></description> </property> <property> <name>dfs.namenode.handler.count</name> <value>100</value> <description></description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/dn</value> </property> </configuration>
最后创建存放日后hadoop要存NameNode、DataNode的数据的目录
;
node1执行命令:【mkdir -p /data/nn】和【mkdir -p /data/dn】
node2、node3执行:【mkdir -p /data/dn】
3、然后该对node2、node3配置了
前面我们一直给node1安装配置,而node2、node3啥都没配置,连hadoop都没有,肯定不能执行hadoop的任务啊
那么我们只需要把node1的hadoop安装文件夹用【scp命令】——>【远程复制】到node2、node3
注意两点:
1、【scp命令】要把 [hadoop安装路径的全名] 写上,软连接的"hadoop"指数一个快捷方式,就相当于你电脑一个软件的快捷方式
2、【`pwd`】这里是倒引号“ `` ”,不是单引号“ '' ”,就是英文的 “【Esc】下的那个键”
3、路径在hadoop安装的文件夹在【/export/server】下
# 比如我的 scp -r hadoop-3.3.5 node2:`pwd` scp -r hadoop-3.3.5 node3:`pwd`
然后分别在各个节点配置他们的软连接
4、为了方便执行hadoop命令,所以还得配置一下全局变量
别管了,配就完事了
编辑这个文件:【vim /etc/profile】
然后复制粘贴下面内容到最底部:
export HADOOP_HOME=/export/server/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
最后别忘了让配置生效:【source /etc/profile】
在任意一个地方输入【hadoop version】,只要没有像我这样显示版本信息的,而是 “bash: hadoop: command not found...” 就说明百分之一万是【vim /etc/profile】配置错了!!!请一定要按照我的步骤,复制我上面的配置信息,一字不漏!!!!!!!!
5、最后最后最后一步,,授权hadoop
一开始之所以用【root】用户身份执行这些操作是因为他的权限最大,在进行一些文件读写的时候不会受阻,但是root的权限太大了,很容易误让别的文件被破坏,所以我们在前面创建了一个【hadoop】用户,是以后我们也希望用hadoop用户来执行跟hadoop有关的操作,而不影响别的文件
;
但是【hadoop】只是普通用户,所以我们需要给它授权让它具有一些文件的读写权限操作
;
那么对于hadoop的操作,我们只需要【hadoop】有权限操作这两个文件夹下的文件就行了:【/data】、【/export】,三个节点都是
chown -R hadoop:hadoop /data chown -R hadoop:hadoop /export
【启动!!!】
再次提醒!!!必须检验在任意地方都可以用【hadoop version】来输出hadoop版本,只要有问题,就一定要重新把每一个文件都好好检查一遍!!!!!!!!
先切换回【hadoop】身份:【su - hadoop】
然后执行格式化namenode先:【hadoop namenode -format】
再此次提醒!!!!格式化之后,【cd /data】然后检查一下【nn】,或者直接【cd /data/nn】检查
如果【nn】是21条数据,而且里面有【current】这个目录,那么就对了
但是如果【nn】是6条数据,而且里面没有【current】这个目录,那么绝对错了!!!!!
;
那就绝对是上面【/export/server/hadoop/etc/hadoop】里的【workers】【hadoop-env.sh】【hdfs-site.xml】【core-site.xml】这几个配置文件的某一个文件没写对!!!一定要把上面我的配置数据完整的复制粘贴过去,一个字符一个丁点一丁丁点点的...标点符号都不能错!!!!
然后执行【start-dfs.sh】一键启动Hadoop集群
启动hadoop是:【start-dfs.sh】
关闭hadoop是:【stop-dfs.sh】
(当然你也可以执行【start-all.sh】、【stop-all.sh】来开启、关hadoop服务,区别是:
【start-dfs.sh】、【stop-dfs.sh】是开启HDFS;
【start-all.sh】、【stop-all.sh】是同时开启HDFS 和 YARN;)
【验证是否成功的方法】
验证方法1: 输入【jps】
在node1可以看到【namenode】【datanode】【secondaryNamenode】【Jps】4个进程
在node2、node3可以看到【datanode】【Jps】2个进程
验证方法2:在你的电脑,不是虚拟机,就是你的电脑直接浏览器输入:http://node1:9870
这里比伪分布式牛的是,我电脑的浏览器也能访问这个页面
然后划到下面,找到【Live Nodes】
然后3个node都“活着”,少一个都错
【诡异未解之谜灵异事件】
那么到这,99%的人都验证失败了,那么请看这里
1、node1启动时报错:3个节点都“Permission denied ......”
有的时候可能会报这样的错:启动时说有几个节点尝试SSH连接各个节点的时候,权限被拒绝,输入命令【jps】也只能看到一个节点
说明:三个节点都没有权限在start-dfs.sh执行操作时,互相连接
但是我明明前面都设置了SSH免密登录,没办法,错了就只能再来一次了:
解决方法:
分别在node1、node2、node3执行【ssh-copy-id node1】、【ssh-copy-id node2】、【ssh-copy-id node3】
了
2、还是出现【Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)】
出现这种错误,就一定还是某个节点连接权限不够而连接不通
解决办法:
如果是node3,就在node1执行【ssh-copy-id hadoop@node3】
如果是node2,就在node1执行【ssh-copy-id hadoop@node2】
3、node1的namenode消失事件
在node1执行【jps】的时候发现,namenode没了,自然 “http://node:9870.com”也打不开了
解决办法:
可以去hadoop的log日志找一下报错信息:【cd /export/server/hadoop/logs】
然后既然是node1的namenode没有,那就找关于namenode-node1的【.log】文件
执行【cat [你的namenode的日志名]】
然后我们看最后一两条信息,那就是我们要的更新的日志信息
拿去一问AI:
一检查,果然泥马勒戈壁的,【/data/nn】变成了root用户的权限
;
;
4、无敌通用解决绝招!!
如果现在经过你的仔细检查,发现
- core-site.xml、hadoop-env.sh、hdfs-site.xml、workers、/etc/profile通通配置正确无误
- 三台节点都可以免密互联互通,没有报 “Permission denied......” 这样的错误
- 【/export】和【/data】下的读写权限都是hadoop的了
- 自己已经切换回hadoop用户了
- 然后已经执行了【hadoop namenode -format】了
然后你再执行【start-dfs.sh】之后,执行【jps】发现依旧有问题:可能node1少了namenode、可能node1少了datanode、可能node2只有jps一个进程,没开启datanode、可能node3只有jps一个进程,没开启datanode、可能node3和node2都只有jps一个进程,没开启datanode
检查hadoop的log日志也没查出个什么来
那么就有可能是你前面不停的启动hadoop服务、不停格式化hadoop而导致一些产生的遗留文件混淆了hadoop操作,简单来说就说——见鬼了,有鬼,这是灵异事件没法解释
;
通用解决办法,百试百灵:
不需要研究为什么,直接删没用的文件,然后重来
1、先在node1执行:【stop-dfs.sh】停掉服务
然后切换root用户,因为他有权限删很多文件
然后依次执行下面每一行,大胆删,这些都是没用的文件,格式化namenode之后会重新生成:(一字不拉,错一个字符你可能就删错了文件)
rm -rf /tmp/hadoop* rm -rf /export/server/hadoop/logs/* rm -rf /data/dn/* rm -rf /data/nn/*
。
node2和node3也一定一定一定要执行!!!
node2和node3只需要执行前三条:
rm -rf /tmp/hadoop* rm -rf /export/server/hadoop/logs/* rm -rf /data/dn/*
;
然后,先别急,一定一定一定一定一定一定一定一定一定一定要先切换回【hadoop】用户
【su - hadoop】
然后再到node1执行【hadoop namenode -format】,格式化namenode
;
再次启动,完美收官
——【Ubuntu】系统演示(尚未写完,以后再写)
【安装Java环境】
这里要注意尽量用1.8版本的JDK!!
可以选择到官网下载JDK软件: Java Downloads | Oracle
在弹出的页面中输入Oracle的账户密码即可下载(如无账户,请自行注册注册是免费的)
或者我已经把 JDK1.8 的安装包【jdk-8u162-linux-x64.tar.gz】放在了百度云盘
通过网盘分享的文件:jdk-8u162-linux-x64.tar.gz
链接: https://pan.baidu.com/s/1dRVkEHh8afHsdS3CAQFjQg?pwd=4zgt 提取码: 4zgt
在Linux命令行界面中,执行如下Shell命令(注意:当前登录用户名是hadoop):
(Linux基础:cd就是进入某个目录,“ / ”是Linux系统的主目录,一般我们在文件夹看不到这一层,只能看到用户主目录“ home ”,下面命令的意思就是【进入根目录下的usr目录下的lib目录】)
cd /usr/lib
(这一条命令就是:在刚刚进入的【/usr/lib】目录下创建【jvm】目录,用来存放JDK文件)
sudo mkdir jvm
然后,我们刚刚在物理计算机window系统下已经把刚刚百度网盘的JDK文件下载好了,两种方法可以让我们的虚拟机的Ubuntu系统也能用
【方法一】就是用我们前期准备安装好的VMtools把文件直接复制粘贴进【/usr/lib/jvm】来
【方法二】开启了共享文件夹的话,就可以放到我们window系统下的那个【shared_folder】,这样我们在虚拟机的Ubuntu系统也就能看到了
然后注意,我们的共享文件夹在【/mnt/hgfs】目录下,然后不管用方法一还是方法二,最终都是要把JDK文件放到【/usr/lib/jvm】这层目录下
但是这一层目录一般虚拟机看不见,我们只能看到用户主目录【home】。
要点下面的【+ Other Locations】,再点【Computer】,这才是Linux系统的【/】根目录,相当于window系统的【我的电脑】
【安装hadoop】
去这个清华大学的中国镜像安装网站: Index of /apache/hadoop/common
直接自己选一个安装
同理,在电脑window下载好之后,不管是放那个共享文件夹里,或者自己手动用VMtools复制粘贴进虚拟机Linux系统,最终都是要解压到根目录【/usr】这个目录里的其中一个目录下
然后记住区别就是:
JDK是解压到【/usr/lib/jvm】,Hadoop是解压到【/usr/local】
然后为了方便演示,我就直接进入到虚拟机把它拖到【Downloads】下载目录,然后进入到【home/Dowloads】这层目录,从这开始将这个文件路径直接一次性解压到
然后执行下面命令直接把hadoop压缩包解压到【/usr/local】
sudo tar -zxf [hadoop文件的绝对或相对路径] -C [要解压到的地方]
# 比如:sudo tar -zxf ~/Downloads/hadoop-2.7.1.tar.gz -C /usr/local
然后就能看到解压成功
然后进入【/usr/local】目录,给它改一下文件名字
sudo mv ./hadoop-2.7.1/ ./hadoop
【分布式配置】
在平时的学习中,我们使用伪分布式就足够了。如果需要安装 Hadoop 集群,请查看Hadoop集群安装配置教程。
相关教程
- 使用Eclipse编译运行MapReduce程序: 使用 Eclipse 可以方便的开发、运行 MapReduce 程序,还可以直接管理 HDFS 中的文件。
- 使用命令行编译打包运行自己的MapReduce程序: 有时候需要直接通过命令来编译、打包 MapReduce 程序。
参考资料
- Apache Hadoop 3.3.6 – Hadoop: Setting up a Single Node Cluster.
- Hadoop集群(第5期)_Hadoop安装配置 - 虾皮 - 博客园
- Hadoop2.x在Ubuntu系统中编译源码 | micmiu - 软件开发+生活点滴