Hadoop集群搭建的大致流程如下:
- 选定一台机器作为 Master
- 在 Master 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
- 在 Master 节点上安装 Hadoop,并完成配置
- 在其他 Slave 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
- 将 Master 节点上的 /usr/local/hadoop 目录复制到其他 Slave 节点上
- 在 Master 节点上开启 Hadoop
首先我们需要准备好网络配置
我这里两台机器都是搭建的虚拟机,针对虚拟机,必须更改网络连接方式为桥接模式,如图所示:![](https://img-blog.csdn.net/20170111215550975?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjQxNDU5MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里我们必须注意一点就是上图中圈出的MAC地址必须
不一样!
linux环境下我们可以通过ifconfig命令查看IP地址,我们当然也可以通过右上角的网络连接查看IP信息
下面我们正式学习hadoop集群的配置,最开始我们已经介绍了hadoop集群配置的一般流程,现在我们首先配置好master机器
为了便于区分,我们可以修改各个节点的主机名:sudo vim /etc/hostname
然后修改自己所用节点的IP映射:sudo vim /etc/hosts
我们这里master节点IP为192.168.0.120,slave1的IP为192.168.0.121
注意:各个节点的修改是一样的,而且一定要修改!
修改完后,我们ping一下,看是不是能ping通:
ping Master -c 3 # 只ping 3次,否则要按 Ctrl+c 中断
ping Slave1 -c 3
![]()
SSH无密码登录节点:这个操作是要让Master节点可无密码SSH登录到各个slave节点
生成Master的公钥:(因为修改过主机名,如果之前有,需要先删掉)
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa* # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回车就可以
cat ./id_rsa.pub >> ./authorized_keys
接着在Master节点上将公钥传输到Slave1节点:
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
在Slave1节点上对ssh公钥加入授权:
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完就可以删掉了
可在Master节点通过如下命令检测:ssh Slave1
集群配置需要修改/usr/local/hadoop/etc/hadoop下面的5个文件: slaves,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml
文件slaves: 将文件中原来的 localhost 删除,只添加一行内容:Slave1
core-site.xml配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
hdfs-site.xml配置:dfs.replication 一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值还是设为 1
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
mapred-site.xml配置:(可能需要先重命名,默认文件名为 mapred-site.xml.template)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
yarn-site.xml配置:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
配置好后,将Master上的/usr/local/hadoop文件夹复制到各个节点上:
在Master节点上执行:
cd /usr/local
sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/* # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在Slave1节点上执行:
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
首次启动需要在Master节点执行NameNode的格式化:
hdfs namenode -format # 首次运行需要执行初始化,之后不需要
在Master节点启动hadoop:
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
通过命令jps检测各个节点的启动情况
Master节点如下图:
Slave1节点如下图:
另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report
查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功
也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070
在Master节点上关闭集群:
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver