Hadoop2.x 伪分布式环境搭建及测试
作者:Fushicho 时间:2018/12/7
目录
第八步:创建 HDFS 目录,以便执行 MapReduce 任务
第十步:运行 Hadoop 自带的 WordCount 例子
第十五步:启动 YARN 的两个节点 ResourceManager 和 NodeManager
第十七步:查看 ResourceManager 的 Web 界面
第十八步:查看 Job History Server 的 web 页面
首先配置JAVA环境
第一步:下载JAVA包
点击进入Oracle官方网站下载
第二步:将文件传送到虚拟机上
我使用的是FileZile软件;
第三步:开始配置JAVA环境:
(1)创建一个文件夹
[root@localhost ~]# mkdir training
(2)解压文件
[root@localhost ~]# tar -zxvf jdk-8u191-linux-x64.tar.gz -C /root/training/
(3)将JAVA添加到环境变量中
[root@localhost ~]# vi /etc/profile
在文件最后加入:
export JAVA_HOME=/root/training/jdk1.8.0_191
export PATH=$PATH:$JAVA_HOME/bin
(4)快速生效环境变量
[root@localhost ~]# source /etc/profile
(5)查看配置是否成功
[root@localhost ~]# java –version
若是成功则可以看到:
下面进行Hadoop环境的配置
第一步:下载Hadoop包
这里提供我的百度云盘连接的hadoop-2.7.3的包链接:
提取码:idee
第二步:将Hadoop传输到虚拟机上
我使用的是FileZile软件;
第三步:解压hadoop包
[root@localhost ~]# tar -zxvf hadoop-2.7.3.tar.gz -C /root/training/
第四步:配置Hadoop
(1)配置SSH无密登录本机
[root@localhost ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[root@localhost ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@localhost ~]# chmod 0600 ~/.ssh/authorized_keys
执行如下命令验证SSH配置,如下:
[root@localhost ~]# ssh localhost
(发现原本需要输入验证密码,现在不用了~)
(2)编辑etc/hadoop/hadoop-env.sh,进入hadoop-2.7.3目录下,然后
[root@localhost hadoop-2.7.3]# vi etc/hadoop/hadoop-env.sh
修改JAVA_HOME的值如下:
export JAVA_HOME=/root/training/jdk1.8.0_191
export PATH=$PATH:$JAVA_HOME/bin
如下图所示位置:
(3)配置core-site.xml
编辑etc/hadoop/core-site.xml
[root@localhost hadoop-2.7.3]# vi etc/hadoop/core-site.xml
修改内容如下:
<configuration>
<!--配置HDFS的NameNode-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!--配置DataNode保存数据的位置-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
</configuration>
(4)配置hdfs-site.xml
编辑etc/hadoop/hdfs-site.xml
[root@localhost hadoop-2.7.3]# vi etc/hadoop/hdfs-site.xml
修改如下:
<configuration>
<!--配置HDFS的冗余度-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
第五步:格式化文件系统
[root@localhost hadoop-2.7.3]# bin/hdfs namenode -format
如果执行成功,会在日志末尾看到格式化成功的提示,如下:
第六步:启动HDFS
[root@localhost hadoop-2.7.3]# sbin/start-dfs.sh
第一次操作的话会要求输入yes;
输入jps查看启动的HDFS的管理节点NameNode和数据节点DataNode,以及NameNode的Slave节点,及SecondaryNameNode,如下:
第七步:查看HDFS的NameNode的Web接口
首先关闭防火墙防火墙
[root@localhost hadoop-2.7.3]# /etc/init.d/iptables stop
[root@localhost hadoop-2.7.3]# chkconfig --level 35 iptables off
这时候就能访问下面网站了: (IP改为自己虚拟机的IP)
结果如下:
第八步:创建 HDFS 目录,以便执行 MapReduce 任务
[root@localhost hadoop-2.7.3]# bin/hdfs dfs -mkdir -p /user/root
也可以在上面的网站中看到hdfs中成功创建了这个目录文件:
第九步:拷贝输入文件到分布式文件系统
[root@localhost hadoop-2.7.3]# bin/hdfs dfs -put etc/hadoop input
这里举例拷贝 etc/hadoop 目录下的文件到 HDFS 中。
查看拷贝结果
[root@localhost hadoop-2.7.3]# bin/hdfs dfs -ls input
也可在网站中查看,如下:
滑动滚动条向下还有挺多内容,就不截图了
第十步:运行 Hadoop 自带的 WordCount 例子
[root@localhost hadoop-2.7.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
这里说明一下这句话的含义:
可以见到下图结果就说明成功了:
说明:
[1] 这种模式是在本地运行 MapReduce 任务,如果需要在 YARN 上运行,请看本文后面的
YARN 配置;
[2] 这个例子是计算某个目录下所有文件中包含某个字符串的次数,这里的字符串是匹配'dfs[a-z.]+'成功的次数;
[3] dfs[a-z.]+是正则表达式,表示以dfs开头加上大于等于一个小写英文字母或.的匹配
第十一步:将结果从分布式文件系统拷贝到本地
[root@localhost hadoop-2.7.3]# bin/hdfs dfs -get output output
[root@localhost hadoop-2.7.3]# cat output/*
结果如下:
这里可以看到每个包含 dfs 的关键词在 etc/hadoop 的所有文件中出现的次数的统计。
且生成文件在当前目录下,输入ll或ls可以查看到出现一个output文件。
第十二步:验证结果
用 linux 命令来统计一下"dfs.class"的次数,结果为 4 次,与 mapreduce 统计的一致。
[root@localhost hadoop-2.7.3]# grep -r 'dfs.class' etc/hadoop/
另外,还可以通过 YARN 来提交 job 任务。步骤如下:
第十三步:配置 mapred-site.xml
(1)首先修改一下mapred-site.xml.template文件成为etc/hadoop/mapred-site.xml
[root@localhost hadoop-2.7.3]# mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
(2)编辑 etc/hadoop/mapred-site.xml
[root@localhost hadoop-2.7.3]# vi etc/hadoop/mapred-site.xml
修改如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
第十四步:配置 yarn-site.xml
编辑 etc/hadoop/yarn-site.xml
[root@localhost hadoop-2.7.3]# vi etc/hadoop/yarn-site.xml
修改如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
第十五步:启动 YARN 的两个节点 ResourceManager 和 NodeManager
[root@localhost hadoop-2.7.3]# sbin/start-yarn.sh
第十六步:启动 historyserver
[root@localhost hadoop-2.7.3]# sbin/mr-jobhistory-daemon.sh start historyserver
确认进程已启动
[root@localhost hadoop-2.7.3]# jps
第十七步:查看 ResourceManager 的 Web 界面
http://192.168.49.131:8088
第十八步:查看 Job History Server 的 web 页面
http://192.168.49.131:19888/
第十九步:运行 MapReduce job 任务
跟前面的命令一样,但是我们将结果输出目录改为 output-yarn,如下:
[root@localhost hadoop-2.7.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output-yarn 'dfs[a-z.]+'
如果运行太慢,可以到之前的网站上监控进度:
查看结果
[root@localhost hadoop-2.7.3]# bin/hdfs dfs -cat output-yarn/*
可以看到结果与之前执行的一致
第二十步:停止 YARN
[root@localhost hadoop-2.7.3]# sbin/stop-yarn.sh
第二十一步:关闭主程序
最后,如果使用完毕,可以关闭 Hadoop。
[root@localhost hadoop-2.7.3]# sbin/stop-dfs.sh
[root@localhost hadoop-2.7.3]# sbin/mr-jobhistory-daemon.sh stop historyserver
可以通过输入jps查看进程是否都成功关闭了;
(若是将hadoop添加到系统的环境变量中,启动和关闭以及上面进行操作的指令都会简单很多~)
(不过,本文是初学者学习搭建伪分布式系统使用的,为了加深理解而使用~)
参考文献: