搭建与安装hadoop(本地模式和伪分布式)
写在前面
随着开学,不少朋友让我帮他们装hadoop,由于同学的配置不一,基本都没有到配置集群的步骤。所以就在这里记录一下配置本地模式和伪分布式的步骤。
准备
- linux系统的虚拟机一台(centos或者ubuntu都可以,centos建议7以上)
- 安装sftp软件,如mobaxterm等等
- 修改IP为静态IP
- 关闭防火墙
- 配置自己的用户具有root权限
- jdk1.8和hadoop的gz包
- 配置主机名与IP地址的映射
以上内容都可在我的另一篇博客搭建Hadoop集群里找到
开始
我们在/opt目录下创建module和software文件夹
[liuge@hadoop06 opt]$ sudo mkdir module
[liuge@hadoop06 opt]$ sudo mkdir software
修改两个文件夹的所有者:
这里liuge是我自己的用户名,填你们自己的即可。
[liuge@hadoop06 opt]$ sudo chown liuge:liuge module/ software/
安装JDK
查询是否安装Java软件:
[liuge@hadoop06 opt]$ rpm -qa | grep java
如果发现安装了openJdk,用命令删除:
[liuge@hadoop06 opt]$ sudo rpm -e 软件包
卸载干净后,用sftp软件将jdk的包(1.8以上)传到/opt/software下
然后解压到/opt/module下:
[liuge@hadoop06 software]$ tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
配置下JDK路径:
[liuge@hadoop06 jdk1.8.0_202]$ pwd
/opt/module/jdk1.8.0_202
sudo vim /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_202
export PATH=$PATH:$JAVA_HOME/bin
[liuge@hadoop06 jdk1.8.0_202]$ source /etc/profile
[liuge@hadoop06 jdk1.8.0_202]# java -version
java version "1.8.0_202"
安装hadoop
将hadoop的包解压出来:
[liuge@hadoop06 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
然后将hadoop添加到环境变量:
[liuge@hadoop06 hadoop-2.7.2]$ sudo vi /etc/profile
在文件末尾添加:
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
让修改的文件生效:
[liuge@hadoop06 hadoop-2.7.2]$ source /etc/profile
运行hadoop
本地模式
在目录下创建一个input
[liuge@hadoop06 hadoop-2.7.2]$ mkdir input
拷贝一些文件到input下:
[liuge@hadoop06 hadoop-2.7.2]$ cp etc/hadoop/*.xml input
执行mapreduce程序:
[liuge@hadoop06 hadoop-2.7.2]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
查看输出结果:
[liuge@hadoop06 hadoop-2.7.2]$ cat output/*
再跑个wordcount示例:
创建一个wcinput文件夹:
[liuge@hadoop06 hadoop-2.7.2]$ mkdir wcinput
在wcinput文件下创建一个wc.input文件:
[liuge@hadoop06 hadoop-2.7.2]$ cd wcinput
[liuge@hadoop06 wcinput]$ touch wc.input
编辑wc.input文件,输入内容:
[liuge@hadoop06 wcinput]$ vim wc.input
hadoop yarn
hadoop mapreduce
atguigu
atguigu
保存退出即可。
最后退回/opt/module/hadoop-2.7.2目录下,执行wordcount:
[liuge@hadoop06 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
查看运行结果:
[liuge@hadoop06 hadoop-2.7.2]$ cat wcoutput/part-r-00000
到这,本地模式运行成功了,也就代表我们的hadoop安装基本成功了。
伪分布式
首先来配置HDFS:
首先找到Jdk的安装目录:
[liuge@hadoop06 ~]# echo $JAVA_HOME
编辑hadoop目录下的配置文件(hadoop-env.sh):
[liuge@hadoop06 hadoop-2.7.2]$ vim etc/hadoop/hadoop-env.sh
在里面找到JAVA_HOME,写上我们自己的:
export JAVA_HOME=/opt/module/jdk1.8.0_202
再编辑一下核心配置文件(core-site.xml),添加namenode配置:
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop06:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
然后配置一下hdfs-site.xml:
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
现在我们可以启动集群了。
首先要格式化集群NameNode(不要随便格式化 !!!这次之后就不要随便格式化了)
[liuge@hadoop06 hadoop-2.7.2]$ bin/hdfs namenode -format
然后我们先启动Namenode:
[liuge@hadoop06 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
再启动datanode:
[liuge@hadoop06 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
使用jps命令查看是否启动成功:
[liuge@hadoop06 hadoop-2.7.2]$ jps
13586 NameNode
13668 DataNode
13786 Jpss
在Web端查看(这里我配置了hosts映射所以可以通过名称直接访问):
http://hadoop06:50070
然后我们通过集群跑一个wordcount:
[liuge@hadoop06 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/liuge/input
[liuge@hadoop06 hadoop-2.7.2]$bin/hdfs dfs -put wcinput/wc.input
/user/liuge/input/
[liuge@hadoop06 hadoop-2.7.2]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liuge/input/ /user/liuge/output
最后可以在WEB端直接查看结果。
之后是配置yarn
编辑一下yarn-env.sh,在里面配置一下JAVA_HOME:
[liuge@hadoop06 hadoop-2.7.2]$ vim etc/hadoop/yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_202
接下来配置yarn-site.xml:
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop06</value>
</property>
再配置mapred-env.sh:
[liuge@hadoop06 hadoop-2.7.2]$ vim etc/hadoop/mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_202
将mapred-site.xml.template重命名为mapred-site.xml,然后对其进行配置:
[liuge@hadoop06 hadoop]$ mv mapred-site.xml.template mapred-site.xml
[liuge@hadoop06 hadoop]$ vi mapred-site.xml
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
然后启动ResourceManager和NodeManager:
[liuge@hadoop06 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
[liuge@hadoop06 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
在WEB端查看:
http://hadoop06:8088/cluster
我们删除HDFS上的output文件,然后执行mapreduce程序:
[liuge@hadoop06 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/liuge/output
[liuge@hadoop06 hadoop-2.7.2]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liuge/input /user/liuge/output
最后可以在WEB上查看结果。
http://hadoop06:8088
配置历史服务器
之后为了显示程序的历史运行情况,配置一下历史服务器。
配置mapred-site.xml:
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop06:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop06:19888</value>
</property>
然后启动历史服务器即可:
[liuge@hadoop06 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
在WEB端查看:
http://hadoop06:19888
配置日志的聚集
日志聚集开启后,可以更好的查看运行日志。
我们编辑yarn-site.xml,开启日志聚集功能:
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
然后重启一下nodemanager,Resourcemanager和HistroyManager。
最后再跑一个wordcount吧:
删除HDFS上已存在的输出文件:
[liuge@hadoop06 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/liuge/output
执行wordcount:
[liuge@hadoop06 hadoop-2.7.2]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/liuge/input /user/liuge/output
最后查看日志:
http://hadoop06:19888/jobhistory
总结
到这里,已经完全配置完了。可以看到配置hadoop需要踏实的linux基础,不然的话本教程是看不懂的。