准备
软件版本
(1)JDK
(2)Hadoop
(3)CentOS
集群规划
下面搭建三种模式的Hadoop集群,各个模式的集群具体划分如下:
(1)本地模式(Local Mode)
主机名 IP地址 Hadoop节点名称
bigdata111 192.168.189.111 无
(2)伪分布式模式(Pseudo-Distributed Mode)
主机名 IP地址 Hadoop节点名称
bigdata111 192.168.189.111
NameNode / SecondaryNameNode / DataNode / ResourceManager / NodeManager
(3)全分布式模式(Fully-Distributed Mode)
主机名 IP地址 Hadoop节点名称
bigdata112 192.168.189.112 NameNode / SecondaryNameNode / ResourceManager
bigdata113 192.168.189.113 DataNode / NodeManager
bigdata114 192.168.189.114 DataNode / NodeManager
本地模式
本地模式没有HDFS,只能测试MapReduce程序,程序运行的结果保存在本地文件系统。
上传文件
将hadoop-2.7.3.tar.gz文件上传至bigdata111服务器的/root/tools下
解压文件
配置环境变量
执行
vi ~/.bash_profile
命令,打开环境变量配置文件,添加如下配置
保存并退出文件,再执行
source ~/.bash_profile
命令,使配置生效。在命令窗口敲入start,然后按Tab键,如果出现如下界面表示配置成功:
配置hadoop-env.sh
进入Hadoop的配置文件目录,如下:
图中是Hadoop的所有配置文件。伪分布式只需要配置hadoop-env.sh,在该文件中配置JDK安装路径,如下:
保存退出文件。事实上,这里不配置JDK,也是可以的。
伪分布式
伪分布式模式在单机上运行,模拟全分布式环境,具有Hadoop的主要功能。它在本地模式基础之上,再如下修改配置文件即可。具体配置如下:
hdfs-site.xml
<configuration>
<property>
<!-- HDFS数据冗余度,默认3 -->
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<!-- 是否开启HDFS权限检查,默认true -->
<name>dfs.permissions</name>
<value>true</value>
</property>
</configuration>
参数说明:
(1)dfs.replication
配置数据的副本数。因为这里是单机,所以副本数配置为1。
(2)dfs.permissions
配置HDFS的权限检查。默认是true,也就是开启权限检查。可以不配置,这里只是为了说明。
core-site.xml
<configuration>
<property>
<!-- 配置NameNode地址 -->
<name>fs.defaultFS</name>
<value>hdfs://bigdata111:9000</value>
</property>
<property>
<!-- 保存HDFS临时数据的目录 -->
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
</configuration>
参数说明:
(1)fs.defaultFS
配置NameNode的地址,通信端口号是9000。bigdata111为主机名,也可以使用IP地址。
(2)hadoop.tmp.dir
配置HDFS数据保存目录,默认是Linux系统的tmp目录,而Linux系统tmp目录重启后会被删除,所以这里需要配置为本地系统的其他目录,例如Hadoop安装目录下的tmp目录。tmp目录需要用户自己创建,如图:
mapred-site.xml
Hadoop配置文件中默认没有这个文件,只提供了模板文件mapred-site.xml.template,需要在当前目录下复制一份:
cp mapred-site.xml.template mapred-site.xml
复制成功后,如图:
具体配置内容如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
参数说明:
(1)mapreduce.framework.name
配置mapreduce程序执行的框架名称:yarn。yarn是资源管理器框架。
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata111</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
参数说明:
(1)yarn.resourcemanager.hostname
配置yarn的主节点ResourceManager主机名;
(2)yarn.nodemanager.aux-services
配置yarn的NodeManager运行MapReduce的方式。
格式化Namenode
执行如下命令
hdfs namenode -format
启动集群
(1)start-all.sh
执行start-all.sh(这个命令已经过期,可以分别执行start-dfs.sh和start-yarn.sh命令)命令,正常启动后如下:
Hadoop节点如下:
a、NameNode
b、DataNode
c、SecondaryNameNode
yarn节点如下:
a、ResourceManager
b、NodeManager
(2)UI
在浏览器中输入地址http://192.168.189.111:50070(SecondaryNameNode端口默认是50090),即可打开Hadoop管理页面,
(1)创建数据
在本地模式中,单词统计的数据输入和输出都是在Linux本地目录,而在伪分布模式中,数据的输入和输出都是HDFS,所以需要在HDFS上准备输入数据。分别执行如下命令:
hdfs dfs -mkdir /input
hdfs dfs -put /root/input/data.txt /input
在HDFS上创建input目录,将数据data.txt上传至该目录。
(2)执行MapReduce程序
在程序所在目录执行如下命令:
hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /output
output目录不能提前创建,成功后,会在HDFS的/output目录下生成两个文件,结果如下:
和本地模式产生的数据是一样的,只是一个存在Linux本地目录,另一个存在HDFS上(事实上它的数据也在Linux上,具体在/root/training/hadoop-2.7.3/tmp/dfs/data/current下)。
全分布式
全分布式环境,用于生产环境。
配置环境变量
三台服务器都需要配置Hadoop环境变量,参考本地模式。也可以单独配置好一台,然后远程拷贝到其他服务器(一定要使配置文件生效)。事实上,只在bigdata112节点上配置也是可以的,不过,这样只能在bigdata112上执行Hadoop命令,比如集群的启动和停止。为了管理方便,建议保持各个节点配置相同。
bigdata112配置
按照伪分布式配置,不同的配置如下:
hadoop-env.sh
在本地模式下,可以不配置JDK,但是全分布式模式必须要配置,不然启动集群时,会报如下错误:
hdfs-site.xml
<configuration>
<property>
<!-- HDFS数据冗余度,默认3 -->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<!-- 是否开启HDFS权限检查,默认true -->
<name>dfs.permissions</name>
<value>true</value>
</property>
</configuration>
数据副本数配置为2,默认是3,这里只有两个datanode,所以配置为2。
core-site.xml
<configuration>
<property>
<!-- 配置NameNode地址 -->
<name>fs.defaultFS</name>
<value>hdfs://bigdata112:9000</value>
</property>
<property>
<!-- 保存HDFS临时数据的目录 -->
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
</configuration>
NameNode地址为bigdata112。
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata112</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
ResourceManager节点主机名改为bigdata112。
slaves
salvas配置文件内容如下:
其他节点配置
将bigdata112的hadoop目录远程拷贝到bigdata113和bigdata114上,命令如下:
scp -r hadoop-2.7.3/ root@bigdata113:/root/training
scp -r hadoop-2.7.3/ root@bigdata114:/root/training
格式化NameNode
这里与伪分布模式相同。成功后,如图:
这一步放在最后。主要是因为如果放在上一步之前,那么会在每个节点上都有tmp/name目录。正常情况下,bigdata112上tmp目录下有name和namesecondary两个目录,如图:
bigdata113和114,tmp目录结构如图:
集群时间同步
安装ntp服务。暂略,以后补上。
启动集群
start-all.sh
在bigdata112上执行集群启动命令start-all.sh,成功后,
在浏览器中输入http://192.168.189.112:50070打开Hadoop管理页面,