搭建与安装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基础,不然的话本教程是看不懂的。

原文地址:https://www.cnblogs.com/wushenjiang/p/13752434.html