在之前我们顺利完成了hadoop的单机模式安装和伪分布安装,接下来我们就可以做集群了
在单机版本的基础上做本实验,我们利用vmware的快照功能挥恢复
,本实验设置一台服务机和一台节点
Server 192.168.224.10
Client1 192.168.224.11
File list:
- Java: jdk-8u191-linux-x64.tar.gz
- hadoop-2.7.1.tar.gz
步骤概要:
选定一台机器作为 Master
在 Master 节点上安装 Java 环境,Hadoop,并完成配置
在其他 Slave 节点上安装 Java 环境
将 Master 节点上的 /usr/local/hadoop 目录复制到其他 Slave 节点上
在 Master 节点上开启 Hadoop
!!!注意
需要在所有机器节点上执行如下命令来
-
关闭并禁用防火墙:
// systemctl stop firewalld.service
// systemctl disable firewalld.service -
设置主机名称
// hostnamectl set-hostname servername.com -
设置自定义域名解析
// vim /etc/hosts
// 192.168.1.2 servername.com -
关闭selinux安全性
// setenforce 0
// vim /etc/selinux/config
SELINUX=disable -
时间同步
ntpdate -u 202.112.10.36
On Client1:
// ssh-keygen
On Server:
// ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.224.11
// vim /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.224.10:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:///usr/local/hadoop/tmp</value>
</property>
</configuration>
// vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.224.10:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</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>
// vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.224.10:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.224.10:19888</value>
</property>
</configuration>
// vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.224.10</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
// echo 192.168.224.10 > /usr/local/hadoop/etc/hadoop/master
// echo 192.168.224.11 > /usr/local/hadoop/etc/hadoop/slaves
配置好后,将 Server 上的 /usr/local/Hadoop 文件夹复制到各个节点上。因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 Server 节点上执行:
注意一定要
// cd /usr/local
// rm -rf ./hadoop/tmp // 删除 Hadoop 临时文件
// rm -rf ./hadoop/logs/* // 删除日志文件
// tar -zcvf /root/hadoop.master.tar.gz ./hadoop // 压缩
// scp /root/hadoop.master.tar.gz root@192.168.224.11:/root/
On Client:
// tar -zxvf /root/hadoop.master.tar.gz -C /usr/local
Java解压到并改名为 /usr/local/jdk
// vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
export CLASS_PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
// source /etc/profile
同样,如果有其他 Slave 节点,也要执行将 hadoop.master.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件的操作。
On Server:
// hdfs namenode -format
// start-dfs.sh
// start-yarn.sh
// jps
5584 ResourceManager
5844 Jps
5403 SecondaryNameNode
5199 NameNode
// hdfs dfsadmin -report
查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功
On Client1:
// jps
3526 DataNode
3691 NodeManager
3806 Jps
访问URL:http://192.168.224.10:50070/ 在主页中点击“Datanodes”,可以看到client1的信息
伪分布式、分布式配置切换时的注意事项
1, 从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件;
2, 在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次 hdfs namenode -format,再次启动试试。
===============================
执行分布式实例
// hdfs dfs -rm -r /output 如果目录已经删除就不需要执行
// echo this is my computer this is my computer > /root/input.txt
// hdfs dfs -mkdir -p /input
// hadoop fs -put /root/input.txt /input/input.txt
执行程序:
// hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.1-sources.jar org.apache.hadoop.examples.WordCount /input/input.txt /output
// hadoop fs -cat /output/part-r-00000
computer 2
is 2
my 2
this 2
以上结果表示分析成功
访问:http://192.168.224.10:8088/cluster 在页面上可以看到执行成功的任务。任务名称例如:“application_1546619214991_0001”。
==========================
添加集群新成员
为已有的集群添加新成员:
Server: 192.168.224.10
新成员: 192.168.224.1x
On Server:
// ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.224.1x
// vim /usr/local/hadoop/etc/hadoop/slaves 加入新集群成员的IP
// cd /usr/local/
// tar -zcf /root/hadoop.master.tar.gz ./hadoop // 先压缩再复制
// scp /root/hadoop.master.tar.gz 192.168.224.1x:/root
On Client:
安装Java,将目录设置为 /usr/local/jdk
// vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
export CLASS_PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
// source /etc/profile
// cd /root/
// tar -zxvf hadoop.master.tar.gz -C /usr/local
On Server:
// stop-all.sh
// start-all.sh
// jps
13688 SecondaryNameNode
14569 Jps
13482 NameNode
13853 ResourceManager
On Client:
// jps
8339 DataNode
8457 NodeManager
8985 Jps
访问:http://192.168.224.10:50070/dfshealth.html//tab-datanode 检查集群成员
========================
执行分布式实例
在所有的机器上执行命令
// cd /usr/local
// rm -rf ./hadoop/tmp // 删除 Hadoop 临时文件
// rm -rf ./hadoop/logs/* // 删除日志文件
// hdfs namenode -format
// hdfs dfs -rm -r /output 如果目录已经删除就不需要执行
// echo this is my computer this is my computer > /root/input.txt
// hdfs dfs -mkdir -p /input
// hadoop fs -put /root/input.txt /input/input.txt
执行程序:
// hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.1-sources.jar org.apache.hadoop.examples.WordCount /input/input.txt /output
// hadoop fs -cat /output/part-r-00000
computer 2
is 2
my 2
this 2
以上结果表示分析成功
访问:http://192.168.224.10:8088/cluster 在页面上可以看到执行成功的任务。任务名称例如:“application_1546619214991_0001”。
===================
FAQ:
故障诊断:
// tail -f /var/log/messages
Ctrl+z 退出日志跟踪
Hadoop日志
vim /usr/local/hadoop/logs/yarn-root-resourcemanager-server.cluster.com.log
vim /usr/local/hadoop/logs/hadoop-root-namenode-server.cluster.com.log
经验:
1、找不到datanode要在usr/local下清理临时文件
2、stop-all.sh,start-all.sh更好用
3、注意联网