本集群使用centOS 7作为系统集群,基于原生Hadoop2,使用版本为Hadoop2.6.0。
一. 搭建前提:
在 搭建集群之前,要保证
- 每台虚拟机都配置好了Hadoop用户
- 安装SSHServer(centOS 7系统安装好后就默认安装了)
- 安装JAVA环境
- 安装Hadoop
二. 网络配置
首先保证所有主机位于同一个局域网内,然后将每台虚拟机的网络都设为桥接模式,并且手工配置IP地址,保证它们的IP地址在同一网段。
可以使用ping命令测试是否能ping通。ping之前需要关闭所有虚拟机的防火墙,centOS 7关闭防火墙的方法:
systemctl stop firewalled.service
开启防火墙的方法:
systemctl start firewalled.service
禁止开机开启防火墙:
systemctl disable firewalled.service
查看防火墙是否关闭
irewall-cmd --state
返回Running表示防火墙正常服务,Not running表示防火墙服务关闭
三. 集群规划
主机名 | IP地址 | 安装的软件 | JPS |
hadoop-master1 | 192.168.105.150 | Jdk/hadoop | ResourceManager/NameNode/JobHistoryServer/SecondaryNameNode |
hadoop-slave1 | 192.168.105.154 | Jkd/hadoop | datanode/nodemanager |
hadoop-slave2 | 192.168.105.155 | Jkd/hadoop | datanode/nodemanager |
hadoop-slave3 | 192.168.105.157 | Jkd/hadoop | datanode/nodemanager |
四. 修改主机名
每台虚拟机上分别执行一下指令,设置自己的主机名
hostnamectl set-hostname 主机名
配置/etc/hosts,把每台虚拟机的IP地址和对应的主机名配置进去
/etc/hosts
192.168.105.150 hadoop-master1
192.168.105.154 hadoop-slave1
192.168.105.155 hadoop-slave2
192.168.105.157 hadoop-slave3
五. SSH无密码登录节点
这一步主要是为了让hadoop-master1节点无密码登录其他slave节点
以下操作在每台虚拟机上都要做:
进入~/.ssh下:
cd ~/.ssh
删除之前该目录下的生成的密钥对,如果之前生成过的话:
rm ./id_rsa*
生成密钥对:私钥id_rsa,公钥 id_rsa.pub
ssh-keygen -t rsa
将自己的公钥上传到本机,实现SSH免密码登录本机
cat ./id_rsa.pub >> ./authorized_keys
测试能否免密码登录本机
ssh 本机主机名
将自己的公钥传输到集群的其他节点,此时需要输入其他节点的密码,传输成功后,登录其他节点就可以不输入密码了,为之后的数据传输和集群启动做准备。
ssh hadoop-你自己(如我的:ssh hadoop-master1)
ssh-copy-id hadoop-master1
ssh-copy-id hadoop-slave1
ssh-copy-id hadoop-slave2
ssh-copy-id hadoop-slave3
然后使用ssh 主机名测试是否可以免密码登录其他节点
六. 配置集群/分布式环境
(一)集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。这些文件均在hadoop安装包的/etc/hadoop/路径之下。
此步骤由hadoop-master1统一完成配置然后传到其他节点,替换之前hadoop安装包,就可以实现hadoop集群了。
- slaves:设置所有的slave节点,由于hadoop-master1只作为namenode,所以删除localhost,其他的slave节点(datanode)主机名全都要写入该文件中,一行写一个。
core-site.xml:
- 指定hdfs的nameservices名称(属性为:fs.defaultFS)为hadoop-master1,与hdfs-site.xml的HA配置相同
- 指定缓存文件存储的路径 (属性为:hadoop.tmp.dir)
具体配置如图所示:
hdfs-site.xml:
- 指定hdfs元数据存储的路径(属性为:dfs.namenode.name.dir)
- 指定hdfs数据存储的路径(属性为:dfs.namenode.name.dir)
- 指定hdfs数据存储的路径(属性为:dfs.datanode.data.dir)
- 指定SecondaryNameNode的主机(属性为:dfs.namenode.secondary.http-address),这里是hadoop-master1上,如果加入另一台主机单独作为SecondaryNameNode,就改成其他的主机名(比如hadoop-master2)。
具体配置如下图:
mapred-site.xml
- 指定MapReduce计算框架使用YARN(属性为:mapreduce.framework.name)
- 指定jobhistory server的rpc地址(属性为:mapreduce.jobhistory.address)
- 指定jobhistory server的http地址(属性为:mapreduce.jobhistory.webapp.address)
具体配置如下图:
yarn-site.xml
- 指定resourcemanager的主机(属性为:yarn.resourcemanager.hostname)
- NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可运行MapReduce程序(属性为:yarn.nodemanager.aux-services)
具体配置如下图:
(二)配置好后,将 hadoop-master1 上的hadoop安装目录下的文件夹复制到各个节点上。因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 hadoop-master1 节点上执行:
sudo rm -r ./tmp # 删除 Hadoop 临时文件
sudo rm -r ./logs/* # 删除日志文件
压缩hadoop-2.6.0下的所有文件:
tar -zcf /home/hadoop/hadoop.master.tar.gz ./hadoop-2.6.0
远程复制到其他节点:
scp /home/hadoop/hadoop.master.tar.gz hadoop-slave1:/home/hadoop/hadoop/
scp /home/hadoop/hadoop.master.tar.gz hadoop-slave2:/home/hadoop/hadoop/
scp /home/hadoop/hadoop.master.tar.gz hadoop-slave3:/home/hadoop/hadoop/
在其他slave节点上执行:
cd /home/hadoop/hadoop/
sudo rm -r /home/hadoop/hadoop/hadoop-2.6.0
sudo tar -zxf /home/hadoop/hadoop/hadoop.master.tar.gz –C /home/hadoop/hadoop/
sudo chown –R hadoop /home/hadoop/hadoop/hadoop-2.6.0
(三) 在hadoop-master1在对namenode进行格式化
hdfs namenode –format
注意:格式化只能进行一次,否则容易导致集群启动不成功。如果集群已经安装完毕,需要加入新的主机,那么主从节点同时跟着修改配置,配置完成后,在hadoop-master1上需要重新格式化,那一定要在每一台机子上执行以下命令:
sudo rm -r ./tmp # 删除 Hadoop 临时文件
sudo rm -r ./logs/* # 删除日志文件
清除之后,再进行格式化。
(四) 在hadoop-master1之上启动集群
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
启动完成之后,在每台主机上使用jps查看进程:
hadoop-master1必须有以下进程:
NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer
hadoop-slave上必须有以下进程:
DataNode 和 NodeManager
缺一都说明集群配置有问题。
七. 启动结果:
hadoop-master1:
hadoop-slave1:
hadoop-slave2:
hadoop-slave3:
hadoop-master1:50070: