实验环境:本操作说明适合502机房和504机房
首先要运行Vmware WorkStation或Virtual Box,启动master完全分布式,slave1完全分布式,slave2完全分布式三台虚
拟机,用XShell远程连接master,slave1,slave2,如果连接不成功,参考《502机房主机win7系统与Vmare虚拟机Linux系统的网络连接配置操作说明》完成网络连接配置,三台虚拟机的IP地址如下:
192.168.56.10 master
192.168.56.11 slave1
192.168.56.12 slave2
第1步:先在第一个台虚拟机master执行以下操作,再依次在slave1和slave2重复相同的操作:
1)执行cd /usr/local/ 切换到安装目录
2)执行mv hadoop-2.6.0-cdh5.7.0/ hadoop-2.6.0-cdh5.7.0.bak 备份掉之前的Hadoop 或 执行 rm -rf hadoop-2.6.0-cdh5.7.0/ 删除掉之前的Hadoop
3)执行cd 切换到/root目录 再执行tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C /usr/local/ 解压缩Hadoop安装包到/usr/local/目录
注意:不要同时三台虚拟机执行解压缩操作,会造成Vmware卡死
第2步:先在第一个台虚拟机master执行以下操作,再依次在slave1和slave2重复相同的操作:
1)执行命令 vi /etc/hostname 将主机名修改为master 修改后执行hostname查看主机名应为master,如果新主机名未生效就reboot重启一下虚拟机即可
2)执行命令 vi /etc/hosts 最后三修行改成
192.168.56.10 master
192.168.56.11 slave1
192.168.56.12 slave2
3) 执行命令 vi /etc/profile 在profile文件末尾增加JAVA_HOME和HADOOP_HOME环境变量:
#jdk
export JAVA_HOME=/usr/local/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
#hadoop
export HADOOP_HOME=/usr/local/hadoop-2.6.0-cdh5.7.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
还必须执行命令 source /etc/profile 使得环境变量设置生效
依次执行 echo $JAVA_HOME 和 echo $HADOOP_HOME 两个命令,测试一下环境变量是否生效
4)执行关闭防火墙命令 systemctl disable firewalld 再执行关闭SeLinux命令 setenforce 0
第3步:设置master、slave1和slave2互相之间的SSH免密登录,先在第一个台虚拟机master执行以下操作,再依次在slave1和slave2重复相同的操作:
1)执行ssh-keygen命令,遇到提示直接回车,需要按多次回车,最后会生成生成一个公钥和私钥的密钥对,出现一个虚线矩形框说明密钥对生成成功
2)执行ssh-copy-id master命令,遇到提示输入密码root,把公钥发送到要进行SSH免密登录的目标主机master
3)执行ssh-copy-id slave1命令,遇到提示输入密码root,把公钥发送到要进行SSH免密登录的目标主机slave1
4)执行ssh-copy-id slave2命令,遇到提示输入密码root,把公钥发送到要进行SSH免密登录的目标主机slave2
5)执行ssh master,测试能否SSH免密登录master主机,如果能不输入密码自动登录成功,说明SSH免密登录设置成功,登录成功后记得执行exit退出回话
6)执行ssh master,测试能否SSH免密登录master主机,如果能不输入密码自动登录成功,说明SSH免密登录设置成功,登录成功后记得执行exit退出回话
7)执行ssh master,测试能否SSH免密登录master主机,如果能不输入密码自动登录成功,说明SSH免密登录设置成功,登录成功后记得执行exit退出回话
注意:本步骤非常重要,一定要确保三台主机互相之间都能够SSH免密登录成功,一共要测试9次!
第4步:重要操作,修改HDFS的配置文件,注意本步骤只需要在master主机执行即可
1)修改hadoop-env.sh文件
执行cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 切换到Hadoop配置文件所在路径
执行vi hadoop-env.sh 文件末尾增加以下环境变量:
export JAVA_HOME=/usr/local/java/jdk1.8
export HADOOP_CONF_DIR=/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop
执行 source hadoop-env.sh 使得环境变量设置生效
2)修改core-site.xml文件
执行cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 切换到Hadoop配置文件所在路径
执行 vi core-site.xml
在
3)修改hdfs-site.xml文件
执行cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 切换到Hadoop配置文件所在路径
执行 vi hdfs-site.xml
在
4)修改slaves文件
执行vi slaves
删除掉localhost,添加以下两行内容:
slave1
slave2
5)将master主机的三个配置文件hadoop-env.sh,core-site.xml,hdfs-site.xml slaves通过scp远程拷贝到另外两台虚拟机slave1和slave2
先执行scp hadoop-env.sh core-site.xml hdfs-site.xml slaves root@slave1:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 远程拷贝到slave1
再执行scp hadoop-env.sh core-site.xml hdfs-site.xml slaves root@slave2:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 远程拷贝到slave2
6)再依次到slave1和slave2两个虚拟机执行以下相同操作:
执行cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 切换到Hadoop配置文件所在路径
执行 source hadoop-env.sh 使得环境变量设置生效
第5步:先在第一个台虚拟机master执行以下操作,再依次在slave1和slave2重复相同的操作:
1)创建HDFS存放数据的本地目录
如果/root/hdfs/tmp目录不存在,执行mkdir -p /root/hdfs/tmp 创建此路径,如果存在可以跳过此步骤
如果/root/hdfs/tmp目录已存在,执行cd /root/hdfs/tmp/ 切换到/root/hdfs/tmp目录
小心执行删除命令 rm -rf /root/hdfs/tmp/* 删除/root/hdfs/tmp/下面的所有文件
第6步:格式化HDFS文件系统
注意:首次启动HDFS集群之前,必须先格式化HDFS文件系统,请注意只需要master主机执行格式化,千万不要在slave1, slave2重复执行格式化命令
只在master主机执行格式化命令 hdfs namenode -format
格式化成功后会输出提示信息: Storage directory /root/hdfs/tmp/dfs/name has been successfully formatted.
第7步:启动HDFS集群
1)在master主机执行脚本start-dfs.sh启动HDFS集群(在任意一台虚拟机执行启动命令start-dfs.sh都可以,只需要执行一次)
2)在master主机执行java进程查看命令jps
[root@master ~]# jps
3616 Jps
3400 NameNode
3)在slave1主机执行java进程查看命令jps
[root@slave1 ~]# jps
2226 DataNode
2356 Jps
2277 SecondaryNameNode
4)在slave2主机执行java进程查看命令jps
[root@slave2 ~]# jps
2984 Jps
2911 DataNode
说明:三台主机分别显示以上进程,说明HDFS集群启动成功(每台主机上运行的进程名称必须正确,进程编号可以不同)
======================从第9步开始执行资源管理器YARN的配置和启动============================
第9步:修改YARN的配置文件(注意本步骤只需要在master主机执行即可)
1)修改mapred-site.xml配置文件
执行cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 切换到Hadoop配置文件所在路径
执行cp mapred-site.xml.template mapred-site.xml 复制mapred-site.xml.template模板文件为一个新的配置文件mapred-site.xml
执行 vi mapred-site.xml
在
2)修改yarn-site.xml配置文件
执行cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 切换到Hadoop配置文件所在路径
执行vi yarn-site.xml
在
3)将master主机的两个配置文件mapred-site.xml和yarn-site.xml通过scp远程拷贝到另外两台虚拟机slave1和slave2
先执行scp hadoop-env.sh mapred-site.xml yarn-site.xml root@slave1:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 远程拷贝到slave1
再执行scp hadoop-env.sh mapred-site.xml yarn-site.xml root@slave2:/usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop 远程拷贝到slave2
第10步:启动资源协调器YARN
1)在master主机执行脚本start-yarn.sh启动YARN(在任意一台虚拟机执行启动命令start-yarn.sh都可以,只需要执行一次)
2)在master主机执行java进程查看命令jps
[root@master ~]# jps
3460 Jps
3205 ResourceManager
2281 NameNode
3)在slave1主机执行java进程查看命令jps
[root@slave1 ~]# jps
2487 NodeManager
2168 DataNode
2218 SecondaryNameNode
2603 Jps
4)在slave2主机执行java进程查看命令jps
[root@slave2 ~]# jps
2774 DataNode
2922 NodeManager
3038 Jps
说明:三台主机分别显示以上进程,说明说明HDFS和YARN都启动成功(每台主机上的进程名称必须正确,进程编号可以不同)
5)打开YARN的自带Web配置页面
在win7下chorme浏览器打开http://192.168.56.10:8088/
第11步:执行MapReduce词频统计实例程序(在任意一台虚拟机执行本步骤都可以)
1)上传要执行统计的文本文件
执行命令 hadoop fs -mkdir /input 在HDFS创建一个/input目录
执行命令 hadoop fs -put /root/word.txt /input 上传本地Linux文件系统的一个文本文件word.txt 到HDFS文件系统的/input目录
执行命令hadoop fs -ls /input 和 hadoop fs -cat /input/word.txt查看已上传到HDFS的文本文件word.txt
2)执行词频统计程序wordcount
切换到MapReduce实例程序所在目录 cd /usr/local/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce
执行命令hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /input/word.txt /output
请注意输出目录/output不能已存在,执行上面命令后会自动创建/output目录
3)查看词频统计程序wordcount的执行结果
先执行命令 hadoop fs -ls /output 查看HDFS的/output目录的内容,应该出现以下内容:
Found 2 items
-rw-r--r-- 1 root supergroup 0 2020-09-25 23:32 /output/_SUCCESS
-rw-r--r-- 1 root supergroup 1306 2020-09-25 23:32 /output/part-r-00000
wordcount运行结果会输出到文件output/part-r-00000中,执行命令:
hadoop fs -cat /output/part-r-00000 查看词频统计程序wordcount的执行结果,输出结果类似以下内容:
details 1
distribution 2
eligible 1
encryption 3
exception 1
则说明MapReduce词频统计程序wordcount运行正确