第3周 Hadoop安装与配置(二)

第3周 · Hadoop安装与配置(二)

虚拟机克隆、集群网络与时钟同步、Zookeeper 集群、完全分布式 HDFS/YARN

项目2阶段01单元1 数据仓库基础与Hive入门

本实训对应的知识点

实训内容与步骤 依据原始实训文档整理,命令与配置均来自文档原文

1.1搭建zookeeper集群

(1)下载并解压zookeeper

到官网(地址:http://Zookeeper.apache.org/releases.html# download)下载Zookeeper稳定版本的apache-zookeeper-3.8.4-bin.tar.gz安装包,然后上传至hadoop1 节点的/home/hadoop/app目录下并解压,具体操作如下所示。

#解压Zookeeper

TEXT
[hadoop@hadoop1 app]$ tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz

#创建Zookeeper软连接

TEXT
[hadoop@hadoop1 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper

(2)修改zoo.cfg配置文件

在运行 Zookeeper 服务之前,需要新建一个配置文件。这个配置文件习惯上命名为zoo.cfg,并保存在conf子目录中,其核心内容如下所示。

TEXT
[hadoop@hadoop1 app]$ cd zookeeper
[hadoop@hadoop1 zookeeper]$ cd conf/
[hadoop@hadoop1 conf]$ ls
configuration.xsl logback.xml zoo_sample.cfg
[hadoop@hadoop1 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@hadoop1 conf]$ vi zoo.cfg

#数据目录需要提前创建

TEXT
dataDir=/home/hadoop/data/zookeeper/zkdata

#日志目录需要提前创建

TEXT
dataLogDir=/home/hadoop/data/zookeeper/zkdatalog

#访问端口号

TEXT
clientPort=2181

#server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口

TEXT
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888

具体操作步骤如图1-1所示。

📷 图1-1 修改zoo.cfg配置文件

(3)同步zookeeper安装目录

使用scp命令将hadoop1节点的Zookeeper安装目录,整体同步到集群的hadoop2和hadoop3节点,具体操作如下所示。

方法1:使用远程拷贝命令scp,操作步骤如下。

TEXT
[hadoop@hadoop1 app]$scp -r zookeeper-3.4.6 hadoop@hadoop2:/home/hadoop/app/
[hadoop@hadoop1 app]$scp -r zookeeper-3.4.6 hadoop@hadoop3:/home/hadoop/app/

方法2:使用集群脚本,操作步骤如下。

TEXT
[hadoop@hadoop1 app]$ deploy.sh apache-zookeeper-3.8.4-bin /home/hadoop/app/ slave

然后分别在hadoop2和hadoop3节点上创建Zookeeper软连接,具体操作如下所示。

TEXT
[hadoop@hadoop2 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper
[hadoop@hadoop3 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper

(4)创建数据和日志目录

在集群各个节点创建Zookeeper数据目录和日志目录,需要跟zoo.cfg配置文件保持一致,具体操作如下所示。

#创建Zookeeper数据目录

方法1:三个节点分别创建。

TEXT
[hadoop@hadoop1 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
[hadoop@hadoop2 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
[hadoop@hadoop3 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata

方法2:使用集群脚本。

TEXT
[hadoop@hadoop1 ~]$ runRemoteCmd.sh 'mkdir -p /home/hadoop/data/zookeeper/zkdata' all

执行效果如图1-2所示。

📷 图1-2 创建zkdata目录

#创建Zookeeper日志目录

方法1:

TEXT
[hadoop@hadoop1 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
[hadoop@hadoop2 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
[hadoop@hadoop3 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog

方法2:(必须安装配置相应脚本工具)

TEXT
[hadoop@hadoop1 ~]$ runRemoteCmd.sh 'mkdir -p /home/hadoop/data/zookeeper/zkdatalog' all

执行效果如图1-3所示。

📷 图1-3 创建zkdatalog目录

(5)创建各节点服务编号

分别在Zookeeper集群各个节点,进入/home/hadoop/data/zookeeper/zkdata目录,创建文件myid,然后分别输入服务编号,具体操作如下所示:

#hadoop1节点

TEXT
[hadoop@hadoop1 zkdata]$ touch myid
[hadoop@hadoop1 zkdata]$ echo 1 > myid

#hadoop2节点

TEXT
[hadoop@hadoop2 zkdata]$ touch myid
[hadoop@hadoop2 zkdata]$ echo 2 > myid

#hadoop3节点

TEXT
[hadoop@hadoop3 zkdata]$ touch myid
[hadoop@hadoop3 zkdata]$ echo 3 > myid

注意:每个节点服务编号的值是一个整形数字且不能重复。

(6)启动Zookeeper集群服务

1)在集群各个节点分别进入Zookeeper安装目录,然后使用如下命令启动Zookeeper服务。

方法1:

TEXT
[hadoop@hadoop1 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh start

方法2:

TEXT
[hadoop@hadoop1 ~]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh start' all

执行效果如图1-4所示。

📷 图1-4 启动zookeeper集群

2)Zookeeper集群启动一会之后,通过如下命令查看Zookeeper集群状态。

方法1:

TEXT
[hadoop@hadoop:1 zookeeper]$ bin/zkServer.sh status
[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh status
[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh status

方法2:

TEXT
[hadoop@hadoop1 ~]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh status' all

执行效果如图1-5所示。

📷 图1-5 查看zookeeper集群状态

如果在Zookeeper集群中,其中一个节点为leader领导者,另外两个节点是follower跟随者,说明Zookeeper集群安装部署成功。

1.2搭建完全分布式Hadoop集群

1.1.1HDFS集训搭建

(1)下载解压Hadoop

首先到官网(地址:https://archive.apache.org/dist/hadoop/common/)下载Hadoop稳定版本的安装包,然后上传至hadoop1节点下的/home/hadoop/app目录下并解压,具体操作如下所示。

[hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz //解压

[hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop //创建软连接

[hadoop@hadoop1 app]$ cd /home/hadoop/app/hadoop/etc/hadoop/ //切换到配置目录

(2)修改HDFS配置文件

1)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/home/hadoop/app/jdk

2)修改core-site.xml配置文件。core-site.xml文件主要配置hadoop的公有属性,具体需要配置的每个属性如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>

<!--默认的HDFS路径-->

TEXT
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/tmp</value>
</property>

<!--hadoop的临时目录,如果需要配置多个目录,需要逗号隔开-->

TEXT
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>

<!--配置Zookeeper 管理HDFS-->

TEXT
</configuration>

3)修改hdfs-site.xml配置文件。hdfs-site.xml文件主要配置跟HDFS相关的属性,具体需要配置的每个属性如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi hdfs-site.xml
<configuration>

<!-- NameNode 数据存储目录 -->

TEXT
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/data/dfs/name</value>
</property>

<!-- DataNode 数据存储目录 -->

TEXT
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/data/dfs/data</value>
</property>

<!-- JournalNode 数据存储目录 -->

TEXT
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/data/journaldata/jn</value>
</property>

<!-- 完全分布式集群名称 -->

TEXT
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>

<!-- 集群中 NameNode 节点都有哪些 -->

TEXT
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2,nn3</value>
</property>

<!-- NameNode 的 RPC 通信地址 -->

TEXT
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop2:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>hadoop3:8020</value>
</property>

<!-- NameNode 的 http 通信地址 -->

TEXT
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop1:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop2:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn3</name>
<value>hadoop3:9870</value>
</property>

<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->

TEXT
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>
</property>

<!-- 访问代理类:client 用于确定哪个 NameNode 为 Active -->

TEXT
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->

TEXT
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>

<!-- 使用隔离机制时需要 ssh 秘钥登录-->

TEXT
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>

<!-- 启用 nn 故障自动转移 -->

TEXT
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>

4)配置workers文件。workers文件是根据集群规划配置DataNode节点所在的主机名,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi workers

hadoop1

hadoop2

hadoop3

5)向所有节点远程复制Hadoop安装目录。在hadoop1节点,切换到/home/hadoop/app目录下,将Hadoop安装目录远程复制到hadoop2和hadoop3节点,具体操作如下两种方法:

方法1:

TEXT
[hadoop@hadoop1 app]$scp -r hadoop-3.3.1 hadoop@hadoop2:/home/hadoop/app/
[hadoop@hadoop1 app]$scp -r hadoop-3.3.1 hadoop@hadoop3:/home/hadoop/app/

方法2:

TEXT
[hadoop@hadoop1 hadoop]$ deploy.sh /home/hadoop/app/hadoop-3.3.1 /home/hadoop/app slave

然后在hadoop2和hadoop3节点上分别创建软连接,具体操作如下所示。

TEXT
[hadoop@hadoop2 app]$ ln -s hadoop-3.3.1 hadoop
[hadoop@hadoop3 app]$ ln -s hadoop-3.3.1 hadoop

备注:复制前删除使用rm -rf hadoop hadoop-3.3.1命令hadoop1、hadoop2上的hadoop hadoop-3.3.1目录

1.1.2启动HDFS集群服务

(1)启动Zookeeper集群

在集群所有节点分别启动Zookeeper服务,具体操作如下所示。

方法1:分别在三个节点启动。

TEXT
[hadoop@hadoop1 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh start

方法2:使用远程执行脚本。

TEXT
[hadoop@hadoop1 hadoop]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh start ' all

(2)启动Journalnode集群

在集群所有节点分别启动Journalnode服务,具体操作如下所示。

方法1:分别在三个节点启动。

TEXT
[hadoop@hadoop1 hadoop]$sbin/hadoop-daemon.sh start journalnode
[hadoop@hadoop2 hadoop]$sbin/hadoop-daemon.sh start journalnode
[hadoop@hadoop3 hadoop]$sbin/hadoop-daemon.sh start journalnode

方法2:使用远程执行脚本。

TEXT
[hadoop@hadoop1 hadoop]$ runRemoteCmd.sh '/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode' all

(3)格式化主节点NameNode

在hadoop1节点(NameNode主节点)上,使用如下命令对NameNode进行格式化。

[hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format / /n amenode 格式化

[hadoop@hadoop1 hadoop]$ bin/hdfs zkfc -formatZK //格式化高可用

[hadoop@hadoop1 hadoop]$bin/hdfs namenode //启动namenode

(4)备用NameNode同步主节点元数据

在hadoop1节点启动NameNode服务的同时,需要在hadoop2,hadoop3节点(NameNode备用节点)上执行如下命令同步主节点的元数据。

TEXT
[hadoop@hadoop2 hadoop]$ bin/hdfs namenode -bootstrapStandby
[hadoop@hadoop3 hadoop]$ bin/hdfs namenode -bootstrapStandby

(5)关闭Journalnode集群

hadoop2节点同步完主节点元数据之后,紧接着在hadoop1节点上,按下〈Ctrl+C〉组合键来结束NameNode进程,然后关闭所有节点上面的Journalnode进程,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$sbin/hadoop-daemon.sh stop journalnode
[hadoop@hadoop2 hadoop]$ sbin/hadoop-daemon.sh stop journalnode
[hadoop@hadoop3 hadoop]$ sbin/hadoop-daemon.sh stop journalnode

(6)一键启动HDFS集群

如果上面操作没有问题,在hadoop1节点上,可以使用脚本一键启动HDFS集群所有相关进程,具体操作下所示。

TEXT
[hadoop@hadoop1 hadoop]$ sbin/start-dfs.sh

注意:第一次安装HDFS需要对NameNode进行格式化,HDFS集群安装成功之后,以后使用start-dfs.sh脚本一键启动HDFS集群的所有进程即可。

1.1.3HDFS集群测试

在浏览器中分别输入网址http://hadoop1:9870,以及http://hadoop3:9870通过 Web 界面查看hadoop1、hadoop3节点的NameNode的状态,结果如图1-6所示。该节点的状态为standby,表示HDFS不能通过hadoop1节点的NameNode对外提供服务。

📷 图1-6 standby状态的NameNode界面

在浏览器中输入网址http://hadoop2:9870,通过Web界面查看hadoop2节点的NameNode的状态,结果如图2-54所示。该节点的状态为active,表示hadoop2节点的NameNode可以对外提供服务。

📷 图1-7 active状态的NameNode界面

注意:某一时刻只能有一个NameNode节点处于active状态。

在hadoop1节点的/home/hadoop/app/hadoop目录下创建words.log文件,然后上传至 HDFS文件系统的/test目录下,检查 HDFS是否能正常使用,具体操作如下:

#本地新建words.log文件

TEXT
[hadoop@hadoop1 hadoop]$ vi words.log
hadoop hadoop hadoop
spark spark spark
flink flink flink
[hadoop@hadoop1 hadoop]$ hdfs dfs -mkdir /test

#上传本地文件words.log

TEXT
[hadoop@hadoop1 hadoop]$ hdfs dfs -put words.log /test

#查看words.log是否上传成功

TEXT
[hadoop@hadoop1 hadoop]$ hdfs dfs -ls /test

/test/words.log

如果上面操作没有异常,说明HDFS分布式集群搭建成功。

1.1.4YARN集群配置

(1)修改 mapred-site.xml配置文件

mapred-site.xml 文件主要配置跟 MapReduce 相关的属性,这里主要将MapReduce的运行环境指定为YARN,核心配置如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>

<!--指定运行mapreduce的环境为YARN-->

TEXT
</property>
</configuration>

(2)修改 yarn-site.xml配置文件

yarn-site.xml 文件主要配置跟YARN 相关的属性,核心配置如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!-- 启用 resourcemanager ha -->

TEXT
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>

<!-- 声明两台 resourcemanager 的地址 -->

TEXT
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>

<!--指定 resourcemanager 的逻辑列表-->

TEXT
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2,rm3</value>
</property>

<!-- ========== rm1 的配置 ========== -->

<!-- 指定 rm1 的主机名 -->

TEXT
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop1</value>
</property>

<!-- 指定 rm1 的 web 端地址 -->

TEXT
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop1:8088</value>
</property>

<!-- 指定 rm1 的内部通信地址 -->

TEXT
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>hadoop1:8032</value>
</property>

<!-- 指定 AM 向 rm1 申请资源的地址 -->

TEXT
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>hadoop1:8030</value>
</property>

<!-- 指定供 NM 连接的地址 -->

TEXT
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>hadoop1:8031</value>
</property>

<!-- ========== rm2 的配置 ========== -->

<!-- 指定 rm2 的主机名 -->

TEXT
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop2</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop2:8088</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>hadoop2:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>hadoop2:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>hadoop2:8031</value>
</property>

<!-- ========== rm3 的配置 ========== -->

<!-- 指定 rm3 的主机名 -->

TEXT
<property>
<name>yarn.resourcemanager.hostname.rm3</name>
<value>hadoop3</value>
</property>

<!-- 指定 rm3 的 web 端地址 -->

TEXT
<property>
<name>yarn.resourcemanager.webapp.address.rm3</name>
<value>hadoop3:8088</value>
</property>

<!-- 指定 rm1 的内部通信地址 -->

TEXT
<property>
<name>yarn.resourcemanager.address.rm3</name>
<value>hadoop3:8032</value>
</property>

<!-- 指定 AM 向 rm1 申请资源的地址 -->

TEXT
<property>
<name>yarn.resourcemanager.scheduler.address.rm3</name>
<value>hadoop3:8030</value>
</property>

<!-- 指定供 NM 连接的地址 -->

TEXT
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm3</name>
<value>hadoop3:8031</value>
</property>

<!-- 指定 zookeeper 集群的地址 -->

TEXT
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>

<!-- 启用自动恢复 -->

TEXT
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>

<!-- 指定 resourcemanager 的状态信息存储在 zookeeper 集群 -->

TEXT
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

<!-- 环境变量的继承 -->

TEXT
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLAS

SPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>

TEXT
</property>
</configuration>

(3)向所有节点同步YARN配置文件

在hadoop1节点上修改完YARN相关配置之后,将修改的配置文件远程复制到hadoop2节点和hadoop3节点,具体操作如下所示。

#将 mapred-site.xml文件远程复制到hadoop2和hadoop3节点

方法1:

TEXT
[hadoop@hadoop1 hadoop]$scp -r mapred-site.xml hadoop@hadoop2:/home/hadoop/app/hadoop/etc/hadoop
[hadoop@hadoop1 hadoop]$scp -r mapred-site.xml hadoop@hadoop3:/home/hadoop/app/hadoop/etc/hadoop

方法2:

TEXT
[hadoop@hadoop1 hadoop]$ deploy.sh mapred-site.xml /home/hadoop/app/hadoop/etc/hadoop/ slave

#将yarn-site.xml文件远程复制到hadoop2和hadoop3节点

方法1:

TEXT
[hadoop@hadoop1 hadoop]$scp -r yarn-site.xml hadoop@hadoop2:/home/hadoop/app/hadoop/etc/hadoop
[hadoop@hadoop1 hadoop]$scp -r yarn-site.xml hadoop@hadoop3:/home/hadoop/app/hadoop/etc/hadoop

方法2:

TEXT
[hadoop@hadoop1 hadoop]$ deploy.sh yarn-site.xml /home/hadoop/app/hadoop/etc/hadoop/ slave

1.1.5启动YARN集群服务

YARN HA的实现依赖于Zookeeper,所以需要优先启动Zookeeper集群。因为前面操作已经启动Zookeeper集群,所以该步骤可以跳过。

启动YARN集群

在hadoop1节点上,使用脚本一键启动YARN集群,具体操作如下所示。

TEXT
[hadoop@hadoop1 hadoop]$ sbin/start-yarn.sh

1.1.6YARN集群测试

(1)Web界面查看YARN集群

在浏览器中输入网址http://hadoop1:8088(或者http://hadoop2:8088;http://hadoop3:8088),通过 Web 界面查看YARN集群信息,结果如图1-8所示。

📷 图1-8 Web界面查看YARN集群

(2)YARN集群测试

为了测试YARN集群是否可以正常运行MapReduce程序,我们以Hadoop自带的wordcount示例来进行演示,具体操作如图1-9所示。

📷 图1-9 YARN集群运行wordcount
TEXT
[hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out

MapReduce作业在YARN集群执行状态结果,如图1-10所示。

📷 图1-10 MapReduce作业运行状态

如果上述操作没有异常,最终作业的状态信息显示为SUCCEEDED,就说明MapReduce程序在YARN集群上面运行成功,从而说明Hadoop分布式集群已经全部搭建成功。

通过命令查询执行结果:

TEXT
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/*

执行结果如图1-11所示。

📷 图1-11MapReduce作业运行结果

II

📄 展开原始文档全文(437 段)

Hadoop安装与配置(二)

1.1搭建zookeeper集群

(1)下载并解压zookeeper

到官网(地址:http://Zookeeper.apache.org/releases.html# download)下载Zookeeper稳定版本的apache-zookeeper-3.8.4-bin.tar.gz安装包,然后上传至hadoop1 节点的/home/hadoop/app目录下并解压,具体操作如下所示。

#解压Zookeeper

[hadoop@hadoop1 app]$ tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz

#创建Zookeeper软连接

[hadoop@hadoop1 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper

(2)修改zoo.cfg配置文件

在运行 Zookeeper 服务之前,需要新建一个配置文件。这个配置文件习惯上命名为zoo.cfg,并保存在conf子目录中,其核心内容如下所示。

[hadoop@hadoop1 app]$ cd zookeeper

[hadoop@hadoop1 zookeeper]$ cd conf/

[hadoop@hadoop1 conf]$ ls

configuration.xsl logback.xml zoo_sample.cfg

[hadoop@hadoop1 conf]$ cp zoo_sample.cfg zoo.cfg

[hadoop@hadoop1 conf]$ vi zoo.cfg

#数据目录需要提前创建

dataDir=/home/hadoop/data/zookeeper/zkdata

#日志目录需要提前创建

dataLogDir=/home/hadoop/data/zookeeper/zkdatalog

#访问端口号

clientPort=2181

#server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口

server.1=hadoop1:2888:3888

server.2=hadoop2:2888:3888

server.3=hadoop3:2888:3888

具体操作步骤如图1-1所示。

📷 图1-1 修改zoo.cfg配置文件

(3)同步zookeeper安装目录

使用scp命令将hadoop1节点的Zookeeper安装目录,整体同步到集群的hadoop2和hadoop3节点,具体操作如下所示。

方法1:使用远程拷贝命令scp,操作步骤如下。

[hadoop@hadoop1 app]$scp -r zookeeper-3.4.6 hadoop@hadoop2:/home/hadoop/app/

[hadoop@hadoop1 app]$scp -r zookeeper-3.4.6 hadoop@hadoop3:/home/hadoop/app/

方法2:使用集群脚本,操作步骤如下。

[hadoop@hadoop1 app]$ deploy.sh apache-zookeeper-3.8.4-bin /home/hadoop/app/ slave

然后分别在hadoop2和hadoop3节点上创建Zookeeper软连接,具体操作如下所示。

[hadoop@hadoop2 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper

[hadoop@hadoop3 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper

(4)创建数据和日志目录

在集群各个节点创建Zookeeper数据目录和日志目录,需要跟zoo.cfg配置文件保持一致,具体操作如下所示。

#创建Zookeeper数据目录

方法1:三个节点分别创建。

[hadoop@hadoop1 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata

[hadoop@hadoop2 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata

[hadoop@hadoop3 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata

方法2:使用集群脚本。

[hadoop@hadoop1 ~]$ runRemoteCmd.sh 'mkdir -p /home/hadoop/data/zookeeper/zkdata' all

执行效果如图1-2所示。

📷 图1-2 创建zkdata目录

#创建Zookeeper日志目录

方法1:

[hadoop@hadoop1 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog

[hadoop@hadoop2 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog

[hadoop@hadoop3 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog

方法2:(必须安装配置相应脚本工具)

[hadoop@hadoop1 ~]$ runRemoteCmd.sh 'mkdir -p /home/hadoop/data/zookeeper/zkdatalog' all

执行效果如图1-3所示。

📷 图1-3 创建zkdatalog目录

(5)创建各节点服务编号

分别在Zookeeper集群各个节点,进入/home/hadoop/data/zookeeper/zkdata目录,创建文件myid,然后分别输入服务编号,具体操作如下所示:

#hadoop1节点

[hadoop@hadoop1 zkdata]$ touch myid

[hadoop@hadoop1 zkdata]$ echo 1 > myid

#hadoop2节点

[hadoop@hadoop2 zkdata]$ touch myid

[hadoop@hadoop2 zkdata]$ echo 2 > myid

#hadoop3节点

[hadoop@hadoop3 zkdata]$ touch myid

[hadoop@hadoop3 zkdata]$ echo 3 > myid

注意:每个节点服务编号的值是一个整形数字且不能重复。

(6)启动Zookeeper集群服务

1)在集群各个节点分别进入Zookeeper安装目录,然后使用如下命令启动Zookeeper服务。

方法1:

[hadoop@hadoop1 zookeeper]$ bin/zkServer.sh start

[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh start

[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh start

方法2:

[hadoop@hadoop1 ~]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh start' all

执行效果如图1-4所示。

📷 图1-4 启动zookeeper集群

2)Zookeeper集群启动一会之后,通过如下命令查看Zookeeper集群状态。

方法1:

[hadoop@hadoop:1 zookeeper]$ bin/zkServer.sh status

[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh status

[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh status

方法2:

[hadoop@hadoop1 ~]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh status' all

执行效果如图1-5所示。

📷 图1-5 查看zookeeper集群状态

如果在Zookeeper集群中,其中一个节点为leader领导者,另外两个节点是follower跟随者,说明Zookeeper集群安装部署成功。

1.2搭建完全分布式Hadoop集群

1.1.1 HDFS集训搭建

(1)下载解压Hadoop

首先到官网(地址:https://archive.apache.org/dist/hadoop/common/)下载Hadoop稳定版本的安装包,然后上传至hadoop1节点下的/home/hadoop/app目录下并解压,具体操作如下所示。

[hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz //解压

[hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop //创建软连接

[hadoop@hadoop1 app]$ cd /home/hadoop/app/hadoop/etc/hadoop/ //切换到配置目录

(2)修改HDFS配置文件

1)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/home/hadoop/app/jdk

2)修改core-site.xml配置文件。core-site.xml文件主要配置hadoop的公有属性,具体需要配置的每个属性如下所示。

[hadoop@hadoop1 hadoop]$ vi core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://mycluster</value>

</property>

<!--默认的HDFS路径-->

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/data/tmp</value>

</property>

<!--hadoop的临时目录,如果需要配置多个目录,需要逗号隔开-->

<property>

<name>ha.zookeeper.quorum</name>

<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

</property>

<!--配置Zookeeper 管理HDFS-->

</configuration>

3)修改hdfs-site.xml配置文件。hdfs-site.xml文件主要配置跟HDFS相关的属性,具体需要配置的每个属性如下所示。

[hadoop@hadoop1 hadoop]$ vi hdfs-site.xml

<configuration>

<!-- NameNode 数据存储目录 -->

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/home/hadoop/data/dfs/name</value>

</property>

<!-- DataNode 数据存储目录 -->

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/home/hadoop/data/dfs/data</value>

</property>

<!-- JournalNode 数据存储目录 -->

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/hadoop/data/journaldata/jn</value>

</property>

<!-- 完全分布式集群名称 -->

<property>

<name>dfs.nameservices</name>

<value>mycluster</value>

</property>

<!-- 集群中 NameNode 节点都有哪些 -->

<property>

<name>dfs.ha.namenodes.mycluster</name>

<value>nn1,nn2,nn3</value>

</property>

<!-- NameNode 的 RPC 通信地址 -->

<property>

<name>dfs.namenode.rpc-address.mycluster.nn1</name>

<value>hadoop1:8020</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn2</name>

<value>hadoop2:8020</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn3</name>

<value>hadoop3:8020</value>

</property>

<!-- NameNode 的 http 通信地址 -->

<property>

<name>dfs.namenode.http-address.mycluster.nn1</name>

<value>hadoop1:9870</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.nn2</name>

<value>hadoop2:9870</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.nn3</name>

<value>hadoop3:9870</value>

</property>

<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>

</property>

<!-- 访问代理类:client 用于确定哪个 NameNode 为 Active -->

<property>

<name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

</property>

<!-- 使用隔离机制时需要 ssh 秘钥登录-->

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/home/hadoop/.ssh/id_rsa</value>

</property>

<!-- 启用 nn 故障自动转移 -->

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<property>

<name>dfs.permissions.enabled</name>

<value>false</value>

</property>

</configuration>

4)配置workers文件。workers文件是根据集群规划配置DataNode节点所在的主机名,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ vi workers

hadoop1

hadoop2

hadoop3

5)向所有节点远程复制Hadoop安装目录。在hadoop1节点,切换到/home/hadoop/app目录下,将Hadoop安装目录远程复制到hadoop2和hadoop3节点,具体操作如下两种方法:

方法1:

[hadoop@hadoop1 app]$scp -r hadoop-3.3.1 hadoop@hadoop2:/home/hadoop/app/

[hadoop@hadoop1 app]$scp -r hadoop-3.3.1 hadoop@hadoop3:/home/hadoop/app/

方法2:

[hadoop@hadoop1 hadoop]$ deploy.sh /home/hadoop/app/hadoop-3.3.1 /home/hadoop/app slave

然后在hadoop2和hadoop3节点上分别创建软连接,具体操作如下所示。

[hadoop@hadoop2 app]$ ln -s hadoop-3.3.1 hadoop

[hadoop@hadoop3 app]$ ln -s hadoop-3.3.1 hadoop

备注:复制前删除使用rm -rf hadoop hadoop-3.3.1命令hadoop1、hadoop2上的hadoop hadoop-3.3.1目录

1.1.2 启动HDFS集群服务

(1)启动Zookeeper集群

在集群所有节点分别启动Zookeeper服务,具体操作如下所示。

方法1:分别在三个节点启动。

[hadoop@hadoop1 zookeeper]$ bin/zkServer.sh start

[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh start

[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh start

方法2:使用远程执行脚本。

[hadoop@hadoop1 hadoop]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh start ' all

(2)启动Journalnode集群

在集群所有节点分别启动Journalnode服务,具体操作如下所示。

方法1:分别在三个节点启动。

[hadoop@hadoop1 hadoop]$sbin/hadoop-daemon.sh start journalnode

[hadoop@hadoop2 hadoop]$sbin/hadoop-daemon.sh start journalnode

[hadoop@hadoop3 hadoop]$sbin/hadoop-daemon.sh start journalnode

方法2:使用远程执行脚本。

[hadoop@hadoop1 hadoop]$ runRemoteCmd.sh '/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode' all

(3)格式化主节点NameNode

在hadoop1节点(NameNode主节点)上,使用如下命令对NameNode进行格式化。

[hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format / /n amenode 格式化

[hadoop@hadoop1 hadoop]$ bin/hdfs zkfc -formatZK //格式化高可用

[hadoop@hadoop1 hadoop]$bin/hdfs namenode //启动namenode

(4)备用NameNode同步主节点元数据

在hadoop1节点启动NameNode服务的同时,需要在hadoop2,hadoop3节点(NameNode备用节点)上执行如下命令同步主节点的元数据。

[hadoop@hadoop2 hadoop]$ bin/hdfs namenode -bootstrapStandby

[hadoop@hadoop3 hadoop]$ bin/hdfs namenode -bootstrapStandby

(5)关闭Journalnode集群

hadoop2节点同步完主节点元数据之后,紧接着在hadoop1节点上,按下〈Ctrl+C〉组合键来结束NameNode进程,然后关闭所有节点上面的Journalnode进程,具体操作如下所示。

[hadoop@hadoop1 hadoop]$sbin/hadoop-daemon.sh stop journalnode

[hadoop@hadoop2 hadoop]$ sbin/hadoop-daemon.sh stop journalnode

[hadoop@hadoop3 hadoop]$ sbin/hadoop-daemon.sh stop journalnode

(6)一键启动HDFS集群

如果上面操作没有问题,在hadoop1节点上,可以使用脚本一键启动HDFS集群所有相关进程,具体操作下所示。

[hadoop@hadoop1 hadoop]$ sbin/start-dfs.sh

注意:第一次安装HDFS需要对NameNode进行格式化,HDFS集群安装成功之后,以后使用start-dfs.sh脚本一键启动HDFS集群的所有进程即可。

1.1.3 HDFS集群测试

在浏览器中分别输入网址http://hadoop1:9870,以及http://hadoop3:9870通过 Web 界面查看hadoop1、hadoop3节点的NameNode的状态,结果如图1-6所示。该节点的状态为standby,表示HDFS不能通过hadoop1节点的NameNode对外提供服务。

📷 图1-6 standby状态的NameNode界面

在浏览器中输入网址http://hadoop2:9870,通过Web界面查看hadoop2节点的NameNode的状态,结果如图2-54所示。该节点的状态为active,表示hadoop2节点的NameNode可以对外提供服务。

📷 图1-7 active状态的NameNode界面

注意:某一时刻只能有一个NameNode节点处于active状态。

在hadoop1节点的/home/hadoop/app/hadoop目录下创建words.log文件,然后上传至 HDFS文件系统的/test目录下,检查 HDFS是否能正常使用,具体操作如下:

#本地新建words.log文件

[hadoop@hadoop1 hadoop]$ vi words.log

hadoop hadoop hadoop

spark spark spark

flink flink flink

[hadoop@hadoop1 hadoop]$ hdfs dfs -mkdir /test

#上传本地文件words.log

[hadoop@hadoop1 hadoop]$ hdfs dfs -put words.log /test

#查看words.log是否上传成功

[hadoop@hadoop1 hadoop]$ hdfs dfs -ls /test

/test/words.log

如果上面操作没有异常,说明HDFS分布式集群搭建成功。

1.1.4 YARN集群配置

(1)修改 mapred-site.xml配置文件

mapred-site.xml 文件主要配置跟 MapReduce 相关的属性,这里主要将MapReduce的运行环境指定为YARN,核心配置如下所示。

[hadoop@hadoop1 hadoop]$ vi mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

<!--指定运行mapreduce的环境为YARN-->

</property>

</configuration>

(2)修改 yarn-site.xml配置文件

yarn-site.xml 文件主要配置跟YARN 相关的属性,核心配置如下所示。

[hadoop@hadoop1 hadoop]$ vi yarn-site.xml

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<!-- 启用 resourcemanager ha -->

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

</property>

<!-- 声明两台 resourcemanager 的地址 -->

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>cluster-yarn1</value>

</property>

<!--指定 resourcemanager 的逻辑列表-->

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2,rm3</value>

</property>

<!-- ========== rm1 的配置 ========== -->

<!-- 指定 rm1 的主机名 -->

<property>

<name>yarn.resourcemanager.hostname.rm1</name>

<value>hadoop1</value>

</property>

<!-- 指定 rm1 的 web 端地址 -->

<property>

<name>yarn.resourcemanager.webapp.address.rm1</name>

<value>hadoop1:8088</value>

</property>

<!-- 指定 rm1 的内部通信地址 -->

<property>

<name>yarn.resourcemanager.address.rm1</name>

<value>hadoop1:8032</value>

</property>

<!-- 指定 AM 向 rm1 申请资源的地址 -->

<property>

<name>yarn.resourcemanager.scheduler.address.rm1</name>

<value>hadoop1:8030</value>

</property>

<!-- 指定供 NM 连接的地址 -->

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm1</name>

<value>hadoop1:8031</value>

</property>

<!-- ========== rm2 的配置 ========== -->

<!-- 指定 rm2 的主机名 -->

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>hadoop2</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address.rm2</name>

<value>hadoop2:8088</value>

</property>

<property>

<name>yarn.resourcemanager.address.rm2</name>

<value>hadoop2:8032</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address.rm2</name>

<value>hadoop2:8030</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm2</name>

<value>hadoop2:8031</value>

</property>

<!-- ========== rm3 的配置 ========== -->

<!-- 指定 rm3 的主机名 -->

<property>

<name>yarn.resourcemanager.hostname.rm3</name>

<value>hadoop3</value>

</property>

<!-- 指定 rm3 的 web 端地址 -->

<property>

<name>yarn.resourcemanager.webapp.address.rm3</name>

<value>hadoop3:8088</value>

</property>

<!-- 指定 rm1 的内部通信地址 -->

<property>

<name>yarn.resourcemanager.address.rm3</name>

<value>hadoop3:8032</value>

</property>

<!-- 指定 AM 向 rm1 申请资源的地址 -->

<property>

<name>yarn.resourcemanager.scheduler.address.rm3</name>

<value>hadoop3:8030</value>

</property>

<!-- 指定供 NM 连接的地址 -->

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm3</name>

<value>hadoop3:8031</value>

</property>

<!-- 指定 zookeeper 集群的地址 -->

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

</property>

<!-- 启用自动恢复 -->

<property>

<name>yarn.resourcemanager.recovery.enabled</name>

<value>true</value>

</property>

<!-- 指定 resourcemanager 的状态信息存储在 zookeeper 集群 -->

<property>

<name>yarn.resourcemanager.store.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

<!-- 环境变量的继承 -->

<property>

<name>yarn.nodemanager.env-whitelist</name>

<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLAS

SPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>

</property>

</configuration>

(3)向所有节点同步YARN配置文件

在hadoop1节点上修改完YARN相关配置之后,将修改的配置文件远程复制到hadoop2节点和hadoop3节点,具体操作如下所示。

#将 mapred-site.xml文件远程复制到hadoop2和hadoop3节点

方法1:

[hadoop@hadoop1 hadoop]$scp -r mapred-site.xml hadoop@hadoop2:/home/hadoop/app/hadoop/etc/hadoop

[hadoop@hadoop1 hadoop]$scp -r mapred-site.xml hadoop@hadoop3:/home/hadoop/app/hadoop/etc/hadoop

方法2:

[hadoop@hadoop1 hadoop]$ deploy.sh mapred-site.xml /home/hadoop/app/hadoop/etc/hadoop/ slave

#将yarn-site.xml文件远程复制到hadoop2和hadoop3节点

方法1:

[hadoop@hadoop1 hadoop]$scp -r yarn-site.xml hadoop@hadoop2:/home/hadoop/app/hadoop/etc/hadoop

[hadoop@hadoop1 hadoop]$scp -r yarn-site.xml hadoop@hadoop3:/home/hadoop/app/hadoop/etc/hadoop

方法2:

[hadoop@hadoop1 hadoop]$ deploy.sh yarn-site.xml /home/hadoop/app/hadoop/etc/hadoop/ slave

1.1.5 启动YARN集群服务

YARN HA的实现依赖于Zookeeper,所以需要优先启动Zookeeper集群。因为前面操作已经启动Zookeeper集群,所以该步骤可以跳过。

启动YARN集群

在hadoop1节点上,使用脚本一键启动YARN集群,具体操作如下所示。

[hadoop@hadoop1 hadoop]$ sbin/start-yarn.sh

1.1.6 YARN集群测试

(1)Web界面查看YARN集群

在浏览器中输入网址http://hadoop1:8088(或者http://hadoop2:8088;http://hadoop3:8088),通过 Web 界面查看YARN集群信息,结果如图1-8所示。

📷 图1-8 Web界面查看YARN集群

(2)YARN集群测试

为了测试YARN集群是否可以正常运行MapReduce程序,我们以Hadoop自带的wordcount示例来进行演示,具体操作如图1-9所示。

[hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out

📷 图1-9 YARN集群运行wordcount

MapReduce作业在YARN集群执行状态结果,如图1-10所示。

📷 图1-10 MapReduce作业运行状态

如果上述操作没有异常,最终作业的状态信息显示为SUCCEEDED,就说明MapReduce程序在YARN集群上面运行成功,从而说明Hadoop分布式集群已经全部搭建成功。

通过命令查询执行结果:

[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/*

执行结果如图1-11所示。

📷 图1-11MapReduce作业运行结果

II