2.3.4 完全分布式安装

完全分布式用多个节点构成集群环境来运行Hadoop,对Linux 机器集群进行规划,使Hadoop 各模块分别部署在不同的多台机器上,环境配置信息如表2-1所示。

表2-1 环境配置信息

1.环境准备

这里采用先在第一台机器上解压、配置 Hadoop,然后再分发到其他两台机器上的方式来安装集群。

(1)解压Hadoop 目录,代码如图2-62所示。

图2-62 解压Hadoop目录

(2)配置Hadoop JDK 路径,修改Hadoop-env.sh、mapred-env.sh、yarn-env.sh 文件中的 JDK 路径,代码如图2-63所示。

图2-63 配置Hadoop JDK路径

(3)配置core-site.xml,代码如图2-64所示。

图2-64 配置core-site.xml

(4)设置fs.defaultFS的参数值为NameNode的地址。

Hadoop.tmp.dir为Hadoop临时目录的地址,默认情况下,NameNode 和 DataNode 的数据文件都会存在这个目录的对应子目录下。应该保证此目录是存在的,如果不存在,则先创建。

(5)配置hdfs-site.xml,代码如图2-65所示。

图2-65 配置hdfs-site.xml

dfs.namenode.secondary.http-address 指定 secondaryNameNode 的 http 访问地址和端口号。因为在规划中,我们将 BigData03 规划为secondaryNameNode 服务器,所以这里设置为bigdata-senior03:50090。

(6)配置slaves,代码如图2-66所示。

图2-66 配置slaves

slaves 文件指定 HDFS 上有哪些 DataNode。

(7)配置yarn-site.xml,代码如图2-67所示。

图2-67 配置yarn-site.xml

根据规划,yarn.resourcemanager.hostname指定ResourceManager 服务器指向BigData-senior02。

yarn.log-aggregation-enable设置是否启用日志聚集功能。

yarn.log-aggregation.retain-seconds设置聚集的日志在 HDFS 上最多保存多长时间。

(8)配置mapred-site.xml,代码如图2-68所示。

图2-68 配置mapred-site.xml

mapreduce.framework.name 设置MapReduce任务运行在YARN上。

mapreduce.jobhistory.address设置MapReduce的历史服务器安装在BigData01机器上。

mapreduce.jobhistory.webapp.address 设置历史服务器的Web页面地址和端口号。

2设置SSH无密码登录

Hadoop集群中各机器之间会相互通过 SSH 访问,因为每次访问都输入密码是不现实的,所以要设置各个机器间的SSH 是无密码登录的。

(1)在BigData01上生成公钥,代码如图2-69所示。

图2-69 生成公钥

一路回车,都设置为默认值,然后在当前用户的Home目录下的.ssh目录中会生成公钥文件(id_rsa.pub)和私钥文件(id_rsa)。

(2)分发公钥,代码如图2-70所示。

图2-70 分发公钥

(3)设置BigData02、BigData03 到其他机器的无密钥登录。

同样,在 BigData02、BigData03 上生成公钥和私钥后,将公钥分发到三台机器上。

3分发Hadoop文件

(1)在其他两台机器上创建存放Hadoop的目录,代码如图2-71所示。

图2-71 创建存放Hadoop的目录

(2)通过SCP分发。

SCP分发代码及结果如图2-72所示。Hadoop根目录下的share/doc目录下存储的是Hadoop相关文件,这个doc目录占用的硬盘空间相当大,一般在1.5GB以上,建议在分发之前将这个目录删除,以节省硬盘空间并提高分发的速度。

图2-72 SCP分发代码及结果

4格式化NameNode

在 NameNode 机器上执行格式化,代码如图2-73所示。

图2-73 格式化NameNode

注意:

如果需要重新格式化NameNode,则先将原有NameNode和DataNode 下的文件全部删除,不然会报错。在core-site.xml文件中,dfs.namenode.name.dir、dfs.datanode.data.dir属性字段可分别设置为NameNode和DataNode的目录路径值。

core-site.xml配置信息如图2-74所示。

图2-74 core-site.xml配置信息

每次格式化都默认创建一个集群ID,并写入NameNode和DataNode的VERSION文件(VERSION文件所在目录为dfs/name/current和dfs/data/current)中,重新格式化时,会默认生成一个新的集群ID,如果不删除原有目录,则会导致NameNode中的VERSION文件中是新的集群ID,而DataNode中是旧的集群ID,不一致时会报错。

另一种方法是格式化时指定集群ID参数,指定为旧的集群ID。

5.启动集群

(1)启动HDFS,代码及结果如图2-75所示。

图2-75 启动HDFS

(2)启动YARN,代码如图2-76所示。

图2-76 启动YARN

(3)在BigData02 上启动ResourceManager,代码及结果如图2-77所示。

图2-77 启动ResourceManager

(4)启动日志服务器。

因为我们规划的是在 BigData01 服务器上运行 MapReduce 日志服务,所以要在 BigData01 上启动,代码及结果如图2-78所示。

图2-78 启动日志服务器

(5)查看HDFS Web 页面。

http://bigdata-senior01:50070/

(6)查看YARN Web 页面。

http://bigdata-senior02:8088/cluster

6测试 Job

我们在这里采用Hadoop自带的WordCount 例子,在集群模式下测试运行MapReduce程序。

(1)准备MapReduce 输入文件 wc.input,代码如图2-79所示。

图2-79 准备MapReduce输入文件wc.input

(2)在 HDFS 中创建输入目录 input,代码如图2-80所示。

图2-80 创建输入目录input

(3)将wc.input上传到 HDFS,代码如图2-81所示。

图2-81 将wc.input上传到HDFS

(4)运行Hadoop自带的MapReduce Demo程序,代码及结果如图2-82所示。

图2-82 运行Hadoop自带的MapReduce Demo程序

(5)查看输出文件,代码及结果如图2-83所示。

图2-83 查看输出文件