hadoop2.x单机搭建分布式集群超详细教程
Posted wy_0928
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop2.x单机搭建分布式集群超详细教程相关的知识,希望对你有一定的参考价值。
【前言】
1.个人PC机配置:戴尔,笔记本,内存8G,硬盘西数500G,CPU酷睿i5
2.由于工作中需要经常在集群上做测试,另外我一直想学习大数据,因此结合百度+同事,有了此篇教程,初学者,不足之处,可在下方留言
【准备工作】
下载如下5个软件:
1.VMware,版本10
2.CentOS系统iso镜像,版本6.5
3.Xshell软件
4.jdk,linux版本1.8
5.hadoop软件包,版本2.7
【注:为方便起见,教程中所有密码均设置为123456】
【搭建步骤】
1.安装VMware软件
详见我博客:
http://blog.csdn.net/wy_0928/article/details/51320437
http://blog.csdn.net/wy_0928/article/details/51320549
2.安装CentOS虚拟机系统以及配置网络和远程连接
详见我博客:
网络设置为NAT模式
http://blog.csdn.net/wy_0928/article/details/51320640
博客中用的是SecureCRT工具,个人目前偏爱Xshell,连接方法很简单,这里不赘述
此时ifconfig查看网卡,应该直接有ip了,试着在虚拟机和本地宿主机ping下:
切换root用户:
3.关闭虚拟机防火墙
首先查看当前防火墙状态:
关闭防火墙:
![](https://image.cha138.com/20221115/581b4cc1fefd4a8c887e184e43bbbef7.jpg)
查看iptables服务是否开启:
![](https://image.cha138.com/20221115/8c16be20c3ec41edab0f97e9bb655a81.jpg)
重启虚拟机:
![](https://image.cha138.com/20221115/8b228bf0c707409e905ffbbdfa7c6244.jpg)
4.安装并配置jdk
这部分用root权限操作
(1)先输入jave-version查看当前jdk版本,不是1.8就先删除已有版本的jdk软件包:
![](https://image.cha138.com/20221115/3148d23837a0499d8035ad5fa1790429.jpg)
(2)去oracle官网下载jdk1.8的Linux版本(记得下载rpm自安装版本),然后上传到/usr/local/src目录;
![](https://image.cha138.com/20221115/15fc8b4d44d54317beaa3821a9aff0cd.jpg)
(3)输入如下命令开始安装jdk:
rpm -i jdk-8u91-linux-i586.rpm
等待安装完成
![](https://image.cha138.com/20221115/7c814e86ebaa482bb0e9ed645a068323.jpg)
在/usr/java路径下查看是否有jdk1.8文件夹:
![](https://image.cha138.com/20221115/72789d3b97074993b57405539df5df74.jpg)
有就安装成功了。
(3)配置环境变量,让系统用1.8版本的jdk:
首先修改系统配置文件:vi /etc/profile
![](https://image.cha138.com/20221115/c19b9c46590b49b48643527ee5662d5c.jpg)
在文件末尾加上如下几行(注意等号前后不要留空格):
![](https://image.cha138.com/20221115/ebfd45d9e2544be7a0bf32e46f4dcfc7.jpg)
保存退出
(4)设置修改后的配置文件生效:
![](https://image.cha138.com/20221115/3199ff7cef8e4a1c90a1d2161eb4f896.jpg)
(5)查看服务器当前jdk版本:
![](https://image.cha138.com/20221115/dae32ec2ab9e4d4e89bf843ba83ba38d.jpg)
至此jdk安装配置结束。
5.创建hadoop相应的文件系统
这部分在root权限下操作
(1)配置hosts文件,路径在/etc/hosts:
![](https://image.cha138.com/20221115/289b927373264329969e0d4eb0e93d00.jpg)
之后在虚拟机ping master看看是否通:
![](https://image.cha138.com/20221115/58b5554b9ebb45f59cb2ac6ed0b7e010.jpg)
(2)查看虚拟机系统中是否安装lvm工具
![](https://image.cha138.com/20221115/e1c38414063e46e28758572354190e26.jpg)
这就表示已安装。
(3)在虚拟机中添加3块硬盘(均为20G)
虚拟机先关机
a)点击 “编辑虚拟机设置”---“添加”---“硬盘”---“下一步”,然后一直点击 “下一步”直到完成:
![](https://image.cha138.com/20221115/33825b9c4bbd4c39bb4d4173621f3e03.jpg)
b)接着,重复此操作2遍,会得到以下图片。最后,点击“确定”并开启虚拟机:
![](https://image.cha138.com/20221115/449daa986b074278a73c317518e67cf4.jpg)
开启后fdisk -l查看硬盘是否开启成功:
可以看到3个20G的硬盘(sdb、sdc、sdd)
(4)创建物理卷
(pvcreate指令用于将物理硬盘分区初始化为物理卷,以便被LVM使用。)
a)使用sdb创建基于sdb的物理卷
pvcreate /dev/sdb
b)使用sdc创建基于sdc的物理卷
pvcreate /dev/sdc
c)使用sdd创建基于sdd的物理卷
pvcreate /dev/sdd
![](https://image.cha138.com/20221115/a12ab93b6a9a414fb40c2eae385a72ca.jpg)
d)查看物理卷是否创建成功
pvdisplay
![](https://image.cha138.com/20221115/49a997c671b543e0ade551167dcab834.jpg)
(5)创建卷组和添加新的物理卷到卷组
a)创建一个卷组
vgcreate test_document /dev/sdb
(vgcreate 命令第一个参数是指定该卷组的逻辑名,后面参数是指定希望添加到该卷组的所有分区和磁盘)
b)将sdc物理卷添加到已有的卷组(注意vgcreate与vgextend用法的区别)
vgextend test_document /dev/sdc
c)将sdd物理卷添加到已有的卷组(注意vgcreate与vgextend用法的区别)
vgextend test_document /dev/sdd
![](https://image.cha138.com/20221115/7df5526d97ce451cbfbd4a7030629e86.jpg)
d)查看卷组大小(发现已经60G了)
![](https://image.cha138.com/20221115/2591c8dbf0ca4419aba1c0b9c4583658.jpg)
(6)激活卷组
![](https://image.cha138.com/20221115/c73a0525c57c4b558a38b01fe42f26f0.jpg)
(7)创建逻辑卷
a)lvcreate -L5120 -n lvhadooptest_document
(该命令是在卷组test_document上创建名字为lvhadoop,大小为5120M的逻 辑卷,并且设备入口为/dev/test_document/lvhadoop ,test_document为卷组名,lvhadoop为逻辑卷名)
b)lvcreate -L51200 -n lvdatatest_document
(该命令是在卷组test_document上创建名字为lvdata,大小为51200M的逻 辑卷,并且设备入口为/dev/test_document/lvdata ,test_document为卷组名,lvdata为逻辑卷名)
![](https://image.cha138.com/20221115/279a74904abc4b2dba9f9f687ec9ca86.jpg)
注意,如果分配过大的逻辑卷lvcreate -L10240 -n lvhadoop test_document会提示剩余空间不足,此时可用命令vgdisplay去产查看剩余空间的大小。
![](https://image.cha138.com/20221115/8d25c4f2dcaf47cf89ecc87755796bfb.jpg)
(8)创建文件系统
a) mkfs -t ext4/dev/test_document/lvhadoop
![](https://image.cha138.com/20221115/1b422fb94f34475b890e49bf01f57c37.jpg)
b) mkfs -t ext4/dev/test_document/lvdata
![](https://image.cha138.com/20221115/f70cd983e9b3498ca2395e9460ef3f2e.jpg)
(9)创建文件夹
a)在linux根目录下创建hadoop文件夹 mkdir -p /hadoop
b)在linux根目录下创建data文件夹 mkdir -p /data
![](https://image.cha138.com/20221115/39769ba064e244a89481c2d3cc3c1bf3.jpg)
(10)挂载
a)mount /dev/test_document/lvhadoop /hadoop
b)mount /dev/test_document/lvdata /data
c)挂载后,再使用 df -kh 命令查看
![](https://image.cha138.com/20221115/7ffafcf5169f423ebead4ad4a86281c2.jpg)
(11)修改自动挂载的配置文件
如果下次重启linux系统后,挂载设备就又看不到了,我们需要把这个文件写入到fstab 分区表文件里面。
a)vi /etc/fstab
![](https://image.cha138.com/20221115/85324295a9344c6fa47511d7f0ca5a61.jpg)
在文件末尾加上如上两行,然后按“ESC”---“shirt”+“:”---输入“x”---回车,之后reboot重启虚拟机。
6.创建hadoop组和用户
(1)创建组
groupadd -g 3000 cloudadmin
(2)创建用户
useradd -u3001 -g cloudadmin hadoop
![](https://image.cha138.com/20221115/2c1589eaaba645a2bda4c329d3bd44b1.jpg)
(3)修改密码
passwd hadoop 密码改为:123456(与root用户的密码一致)
![](https://image.cha138.com/20221115/ada8d44fe70e45e58f2911fe878a8633.jpg)
(4)修改文件的系统权限
a)修改hadoop文件的系统权限 chown -Rhadoop:cloudadmin /hadoop
b)修改data文件的系统权限 chown -Rhadoop:cloudadmin /data
c)查看 ls -l / | grep cloudadmin
![](https://image.cha138.com/20221115/c4056b3eb03e4d7eb25e3700d337c4f5.jpg)
7.下载hadoop软件包
打开hadoop官网http://hadoop.apache.org:
![](https://image.cha138.com/20221115/1e469cb827954463bf33d6355245cbf4.jpg)
点击左侧的Download Hadoop
![](https://image.cha138.com/20221115/e15238953576412daeafbb60a1943913.jpg)
单击releases
![](https://image.cha138.com/20221115/7ed9271d95da4750abf9a52690e2f65b.jpg)
单击binary,注意source是源码,不要下载错了
![](https://image.cha138.com/20221115/dd1fd6b9cbcd493da60e5615663a52c6.jpg)
单击上图的链接进行下载
![](https://image.cha138.com/20221115/ef9b0d9c26e042b3a1ca8faf47ef3ad1.jpg)
上图中-src是源码文件,我们用另外一个。
8.在虚拟机中解压hadoop
(1)将下载的压缩包上传到/hadoop目录下(rz命令):
![](https://image.cha138.com/20221115/0ffe03e8f7814e308497d8d136e5d724.jpg)
(2)切换到hadoop用户
重启虚拟机,用hadoop用户登录,注意Xshell远程连接的时候,新建个hadoop用户登录窗口
(退出hadoop用户exit,查看当前用户whoami)
![](https://image.cha138.com/20221115/af817c9c3b9546918090f6bcf1f96963.jpg)
(3)解压hadoop压缩包:tar -zxvfHadoop-2.7.3-src.tar.gz,解压完成后出现hadoop文件夹:
![](https://image.cha138.com/20221115/5deb51eb75404e01a01759627abb77b7.jpg)
之后ll查看:
![](https://image.cha138.com/20221115/9ff1c10314a94ae7b1708ced6ba528b9.jpg)
9.创建集群(规划1个主节点,2个从节点)
为了看着舒服,将当前虚拟机改名为hm(直接在VMware右键重命名即可);
(1)克隆2台虚拟机
在VMware虚拟机中右键-管理-克隆
![](https://image.cha138.com/20221115/4247e6ca56dc4fbc875935154d1adf15.jpg)
直接下一步
直接下一步
![](https://image.cha138.com/20221115/493a246a478e462d83a8200bc8b34f43.jpg)
选择创建完整克隆,下一步,将名称改为hd001:
![](https://image.cha138.com/20221115/e881b6218926441d9c245b466bde1884.jpg)
点完成开始克隆,克隆完成后:
![](https://image.cha138.com/20221115/2067455fd3fc4f90b01cc8e4ccc726ad.jpg)
点关闭即可,用同样的方法再克隆一台虚拟机(注意名称为hd002)。
![](https://image.cha138.com/20221115/b5585d07a89e42f3bf8e09045e9abad0.jpg)
克隆的时候,新虚拟机ip自动更新1,就是比如第一台虚拟机ip为192.168.99.1,那么克隆出第二台,ip自动更新为192.168.99.2,以此类推。
(2)修改3台虚拟机的主机名
开启3台虚拟机,用Xshell连接的时候注意ip不同,之后3台虚拟机都切换成root用户:
![](https://image.cha138.com/20221115/52f853eed0cd4015b92806144f943ec4.jpg)
其中hostname是查看当前主机名,hostname hm是将主机名改为hm,但是这么做重启会失效,因此我们修改配置文件network,之后reboot重启此虚拟机。
其余所有虚拟机都重复上述操作,注意主机名hm改为hd001和hd002。
(3)修改3台虚拟机的ip和mac
全部用root用户登录!
![](https://image.cha138.com/20221115/21606d9c896d4862ab6bfb1483152d0c.jpg)
先修改第一台虚拟机的ip和mac,输入cat/etc/udev/rules.d/70-persistent-net.rules查看,如果不是下图的样子,将其余网卡注释掉,另外复制它的MAC地址:
![](https://image.cha138.com/20221115/499954f502c2439eba0203c266cd4e64.jpg)
进入network-scripts目录,编辑其内的ifcfg-eth0文件,将该虚拟机的ip和刚刚复制的mac地址覆盖上:
![](https://image.cha138.com/20221115/9e16976918e94370806643029d5168dc.jpg)
重启网卡
![](https://image.cha138.com/20221115/e56e80ae7b8948f6ab49876049f33ead.jpg)
至此,第一台虚拟机的ip和mac配置完毕,接着配置第二台虚拟机的ip和Mac地址,输入vi /etc/udev/rules.d/70-persistent-net.rules修改,因为上面的MAC地址与第一台虚拟机相同,因此我们用下一个,并将网卡修改为eth0:
![](https://image.cha138.com/20221115/5b8ae7f0be4b4bdc9496358a2029a0af.jpg)
后续步骤同上,接着同理配置第三台虚拟机的ip和Mac地址。
(4)修改映射关系
用root登录第一台虚拟机,输入vi /etc/hosts,按照下图配置,图中的ip为各个虚拟机的ip:
![](https://image.cha138.com/20221115/6f227dc31a7043b78494668a1ee68733.jpg)
进入/etc文件夹:
scp hosts192.168.102.129://etc/
将hm etc文件夹下的hosts传到192.168.102.128 的etc下
scp hosts192.168.102.130://etc/
将hm etc文件夹下的hosts传到192.168.102.130 的etc下
有提示时,输入yes,密码是刚设置的123456
![](https://image.cha138.com/20221115/808a110436144b539d2a3d5c07ac26bb.jpg)
再去另外2台虚拟机查看文件是否传输成功cat /etc/hosts
![](https://image.cha138.com/20221115/c68d20cc94964bf09e84f6476566deb1.jpg)
在每台虚拟机中进行ping通测试,这里每台虚拟机都需要测试与另外所有虚拟机是否通,且ping ip和ping 主机名都要测试(这里很容易漏测):
![](https://image.cha138.com/20221115/9ffa52abadcf4e8eaceff9c715a5768e.jpg)
10.在集群中配置SSH免密登录
(1)重启所有虚拟机,均用hadoop用户登录
(2)在主节点hm的Xshell里输入ssh-keygen -t rsa命令,然后一直按回车即可
![](https://image.cha138.com/20221115/7eb671bfde6341b487ae1b7aaeed5389.jpg)
在主节点hm上执行如下命令:
cd ~
cd .ssh
catid_rsa.pub >> authorized_keys
scp authorized_keys192.168.102.129:/root/.ssh/
scpauthorized_keys 192.168.102.130:/root/.ssh/
出现提示就输入yes,密码是之前设置的123456,这里如果在scp时提示Permission denied,是因为当前登录的hadoop用户没有权限,解决办法3个:其一是为hadoop用户授权,其二是切换成root用户进行操作,其三是将authorized_keys从主节点下载到本地再逐一上传到所有从节点。
(3)SSH免密码登录验证
ssh hd001date
ssh hd002date
第一次输入会有提示,输入yes,后面就正常
![](https://image.cha138.com/20221115/f98121ef17904a86b14586fd868c2705.jpg)
11.修改hadoop集群的配置文件
在hadoop用户下进行以下操作:
(1)在集群中的所有节点上创建相应的文件目录
a)创建tmp文件,mkdir -p /data/tmp
b)创建name文件,mkdir -p /data/name
c)创建data文件,mkdir -p /data/data
d)进入data目录,cd /data
e)查看data文件夹下的文件,ls
![](https://image.cha138.com/20221115/3cd083fbae9e49feb98f2522ebce8ea4.jpg)
(2)在主节点上修改配置文件
a)进入根目录cd /
b)进入hadoop配置文件所在目录cd /hadoop/hadoop-2.7.3/etc/hadoop/
![](https://image.cha138.com/20221115/93d89d62ac0147f095501b199524385c.jpg)
c)修改hadoop-env.sh文件vi hadoop-env.sh
![](https://image.cha138.com/20221115/daa1dc8774b940e5afd271783a2c0da7.jpg)
这里JAVA_HOME的地址是之前配置JDK那里的地址
d)修改core-site.xml文件vi core-site.xml
![](https://image.cha138.com/20221115/36601585db734ec4a561d5fd137fd170.jpg)
注意主机名hm和路径是之前设置好的,不要配错了
e)修改hdfs-site.xml文件vi hdfs-site.xml
![](https://image.cha138.com/20221115/aee42dbb7b3f48a79f282111cb306dd1.jpg)
注意这里的路径是之前设置好的,不要配错了,另外有几台从节点就写几,我这里写2
f)修改mapred-site.xml.template文件vi mapred-site.xml.template
![](https://image.cha138.com/20221115/1ed97e71bde44b5395bbc4f5aee0b799.jpg)
注意主节点名hm是之前设置好的,不要配错了
g)复制文件,将mapred-site.xml.template复制一份并重新命名为mapred-site.xml存放在当前路径:
![](https://image.cha138.com/20221115/a63bcc6aa93b4b33bc94bc48cc395210.jpg)
同理将mapred-queues.xml.template复制一份并重新命名为mapred-queues.xml存放在当前路径:
![](https://image.cha138.com/20221115/415079f25107417ca15351d067eaffb4.jpg)
注:hadoop1.x版本直接有这两个文件,而hadoop2.x版本需要复制重命名一下
h)继续修改hdfs-site.xml文件
因为hadoop2.x删除了1.x版本的masters文件,因此将master在hdfs-site.xml里面
![](https://image.cha138.com/20221115/a92ecc4d25e44b2392c44979053f1573.jpg)
i)修改slaves文件vi slaves
这里写入所有从节点的主机名
(3)同步时钟
ntpdate
(4)分发hadoop软件包到从节点上
注意这步是hadoop用户在/hadoop目录下操作,时间较长,请耐心等待
scp -r hadoop-2.7.3hd001:/hadoop/
scp -rhadoop-2.7.3 hd002:/hadoop/
12.格式化HDFS
(1)在hadoop用户下进入主节点的/hadoop/hadoop2.7.3目录
(2)格式化hdfs
bin/hadoop namenode -format
![](https://image.cha138.com/20221115/d96643959c94480b91a70077620b10f8.jpg)
如果有提示,输入大写的Y,小写的报错,没有就算了
![](https://image.cha138.com/20221115/db173c830b124db09fa84920db99ee73.jpg)
格式化出错的解决方法
a、查看端口9000的信息(需要在root用户下查看)
netstat -anp|grep 9000
b、格式化只能1次,如果后面再次格式化则会导致不成功,需要将所有节点上根目录下data目录下的data、name、tmp文件删除,再新建data、name、tmp空的文件夹。
13.启动hadoop 系统
(1)用hadoop用户登录主节点,进入/hadoop/hadoop2.7.3目录
(2)启动hadoop系统
bin/start-all.sh或sbin/start-all.sh
(关闭集群sbin/stop-all.sh)
版本不同,apache的2.x版本启动脚本是在sbin文件夹内。
![](https://image.cha138.com/20221115/91bfbf80596549bd99078b3209ac91cf.jpg)
输入yes
![](https://image.cha138.com/20221115/2f8d9b9f83ce45168d351a28d0d0a2ca.jpg)
(3)检查hadoop的相关进程是否启动成功
a)主节点jps
![](https://image.cha138.com/20221115/a0db993c4d504618aa3696ce22194356.jpg)
b)所有从节点jps
![](https://image.cha138.com/20221115/8960b919fb434d188d292ec813a74614.jpg)
(4)检查集群状态
a)在hadoop用户下进入主节点的/hadoop/hadoop2.7.3目录
b)输入bin/hadoop dfsadmin -report命令
![](https://image.cha138.com/20221115/2dc494b54da944788f4caa747eb9c72d.jpg)
(5)查看监控界面
a)在浏览器地址栏输入192.168.102.128:8088回车
![](https://image.cha138.com/20221115/e0eb9005306d40a0b52918660f9a02e0.jpg)
hadoop1.x端口是50030,后来2.x改为8088了。
【后记】
1.开启hadoop集群方法
所有虚拟机开机-Xshell远程登录所有虚拟机(建议用hadoop用户)-在主节点用hadoop用户进入/hadoop2.7.3目录,输入/sbin/start-all.sh回车。
2.关闭hadoop集群方法
在主节点用hadoop用户进入/hadoop2.7.3目录,输入sbin/stop-all.sh回车。
3.网页监控
192.168.102.128:8088
以上是关于hadoop2.x单机搭建分布式集群超详细教程的主要内容,如果未能解决你的问题,请参考以下文章
Hadoop 3.1.3 分布式集群搭建,超详细,保姆级教程