Hadoop全分布配置

发布时间 2023-04-30 17:15:18作者: LGAEY

1.实验一:hadoop 全分布配置

1.1. 实验目的

完成本实验,您应该能够:

  • 掌握 hadoop 全分布的配置
  • 掌握 hadoop 全分布的安装
  • 掌握 hadoop 配置文件的参数意义

1.2. 实验要求

  • 熟悉 hadoop 全分布的安装
  • 了解 hadoop 配置文件的意义

1.3. 实验环境

本实验所需之主要资源环境如表 1-1 所示。
表 1-1 资源环境

服务器集群 3 个以上节点,节点间网络互通,各节点最低配置:双核 CPU、8GB 内存、100G硬盘
运行环境 CentOS 7.4

| 服务和组件 | 完成前面章节的实验,其他服务及组件根据实验需求安装服务器集群 3 个以上节点,节点间网络互通,各节点最低配置:双核 CPU、8GB 内存、100G
硬盘
运行环境 CentOS 7.4
服务和组件 完成前面章节的实验,其他服务及组件根据实验需求安装 |

1.4. 实验过程

1.4.1. 实验任务一:在 Master 节点上安装 Hadoop

1.4.1.1. 步骤一:解压缩 hadoop-2.7.1.tar.gz 安装包到/usr 目录下

[root@master ~]# tar -zxvf /opt/software/hadoop-2.7.1.tar.gz -C /usr/local/src/ 

1.4.1.2. 步骤二:将 hadoop-2.7.1 文件夹重命名为 hadoop

[root@master ~]# mv /usr/local/src/hadoop-2.7.1 /usr/local/src/hadoop

1.4.1.3. 步骤三:配置 Hadoop 环境变量

注意:在第二章安装单机 Hadoop 系统已经配置过环境变量,先删除之前配置后添加

在文件末尾添加以下配置信息

[root@master ~]# vi /etc/profile

export JAVA_HOME=/usr/local/src/jdk
export PATH=${JAVA_HOME}/bin:$PATH
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

1.4.1.4. 步骤四:使配置的 Hadoop 的环境变量生效

[root@master src]# source /etc/profile
[root@master src]# echo $PATH
/usr/local/src/hadoop/bin:/usr/local/src/hadoop/sbin:/usr/local/src/jdk/bin:/usr/local/src/hadoop-2.7.1/bin:/usr/local/src/hadoop-2.7.1/sbin:/usr/local/src/jdk1.8.0_152/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

1.4.1.5. 步骤五:执行以下命令修改 hadoop-env.sh 配置文件。

[root@master src]# cd /usr/local/src/hadoop/etc/hadoop/
#在文件末尾添加以下配置信息
[root@master src]# vim /usr/local/src/hadoop/etc/hadoop/hadoop-env.sh 
export JAVA_HOME=/usr/local/src/jdk

1.4.2. 实验任务二:配置 hdfs-site.xml 文件参数

执行以下命令修改 hdfs-site.xml 配置文件。

[root@master src]# vim /usr/local/src/hadoop/etc/hadoop/hdfs-site.xml 
#在文件中和一对标签之间追加以下配置信息
<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/usr/local/src/hadoop/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/usr/local/src/hadoop/dfs/data</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>

</configuration>

​ 保存以上配置执行以下命令:

[root@master src]# mkdir -p /usr/local/src/hadoop/dfs/{name,data}

对于 Hadoop 的分布式文件系统 HDFS 而言,一般都是采用冗余存储,冗余因子通常为
3,也就是说,一份数据保存三份副本。所以,修改 dfs.replication 的配置,使 HDFS 文件
的备份副本数量设定为 3 个。
该配置文件中主要的参数、默认值、参数解释如下表 4-4 所示:

1648025832700

1.4.3. 实验任务三:配置 core-site.xml 文件参数

执行以下命令修改 core-site.xml 配置文件。

[root@master src]# vim /usr/local/src/hadoop/etc/hadoop/core-site.xml 

#在文件中<configuration>和<configuration>一对标签之间追加以下配置信息

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/src/hadoop/tmp</value>
        </property>

</confiouration>

​ 保存以上配置执行以下命令:

[root@master src]# mkdir -p /usr/local/src/hadoop/tmp

如没有配置 hadoop.tmp.dir 参数,此时系统默认的临时目录为:/tmp/hadoop-hadoop。
该目录在每次 Linux 系统重启后会被删除,必须重新执行 Hadoop 文件系统格式化命令,否
则 Hadoop 运行会出错。
该配置文件中主要的参数、默认值、参数解释如下表 4-5 所示:

1648026525729

1.4.4. 实验任务四:配置 mapred-site.xml(在master上执行)

​ 在“/usr/local/src/hadoop/etc/hadoop”目录下有一个 mapred-site.xml.template,
需要修改文件名称,把它重命名为 mapred-site.xml,然后把 mapred-site.xml 文件配置成
如下内容。
执行以下命令修改 mapred-site.xml 配置文件。

#确保在该路径下执行此命令
[root@master hadoop]# cd /usr/local/src/hadoop/etc/hadoop 
[root@master hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@master hadoop]# vim /usr/local/src/hadoop/etc/hadoop/mapred-site.xml
#在文件中和一对标签之间追加以下配置信息
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistort.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>

</configuration>

该配置文件中主要的参数、默认值、参数解释如下表 4-6 所示:

1648028933302Hadoop 提供了一种机制,管理员可以通过该机制配置 NodeManager 定期运行管理员提
供的脚本,以确定节点是否健康。
管理员可以通过在脚本中执行他们选择的任何检查来确定节点是否处于健康状态。如果
脚本检测到节点处于不健康状态,则必须打印以字符串 ERROR 开始的一行信息到标准输出。
NodeManager 定期生成脚本并检查该脚本的输出。如果脚本的输出包含如上所述的字符串
ERROR,就报告该节点的状态为不健康的,且由 NodeManager 将该节点列入黑名单,没有进
一步的任务分配给这个节点。但是,NodeManager 继续运行脚本,如果该节点再次变得正常,
该节点就会从 ResourceManager 黑名单节点中自动删除。节点的健康状况随着脚本输出,如
果节点有故障,管理员可用 ResourceManager Web 界面报告,节点健康的时间也在 Web 界面
上显示。

1.4.5. 实验任务五:配置 yarn-site.xml(在master上执行)

执行以下命令修改 yarn-site.xml 配置文件。

[root@master hadoop]# vim /usr/local/src/hadoop/etc/hadoop/yarn-site.xml 

#在文件中和一对标签之间追加以下配置信息

<configuration>
        <property>
                <name>yarn.resourcemanager.address</name>
                <value>master:8032</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>master:8030</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>master:8031</value>
        </property>
        <property>
                <name>yarn.resourcemanager.admin.address</name>
                <value>master:8033</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>master:8088</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>

</configuration>

该配置文件中主要的参数、默认值、参数解释如下表 4-7 所示:

1648028993855

很显然,很多参数没有专门配置,多数情况下使用默认值。例如,可以追加以下两个参
数配置项 yarn.resourcemanager.hostname( 即 资 源 管 理 器 主 机 ) 和
“yarn.nodemanager.aux-services”(即 YARN 节点管理器辅助服务),若要将主节点也作为
资源管理主机配置,则配置值分别为“Master_hadoop”、“mapreduce_shuffle”。
在 yarn-site.xml 中可以配置相关参数来控制节点的健康监测脚本。如果只有一些本
地磁盘出现故障,健康检查脚本不应该产生错误。NodeManager 有能力定期检查本地磁盘的
健康状况(特别是检查 NodeManager 本地目录和 NodeManager 日志目录),并且在达到基于
“yarn.nodemanager.disk-health-checker.min-healthy-disks”属性的值设置的坏目录数
量阈值之后,整个节点标记为不健康,并且这个信息也发送到资源管理器。无论是引导磁盘
受到攻击,还是引导磁盘故障,都会在健康检查脚本中标识。

1.4.6. 实验任务六:Hadoop 其它相关配置

1.4.6.1. 步骤一:配置 masters 文件

执行以下命令修改 masters 配置文件。

[root@master hadoop]# vim /usr/local/src/hadoop/etc/hadoop/masters
#在此文件中列出所有masters节点的IP
#加入以下配置信息
#master 主机 IP 地址
192.168.88.100
#保存并退出

1.4.6.2. 步骤二:配置 slaves 文件

需要把所有数据节点的主机名写入该文件,每行一个,默认为 localhost(即把本机作
为数据节点),所以,在伪分布式配置时,就采用了这种默认的配置,使得节点既作为名称
节点也作为数据节点。在进行分布式配置时,可以保留 localhost,让 Master 节点同时充
当名称节点和数据节点,或者也可以删掉 localhost 这行,让 Master 节点仅作为名称节点
使用。
本教材 Master 节点仅作为名称节点使用,因此将 slaves 文件中原来的 localhost 删
除,并添加 slave1、slave2 节点的 IP 地址。
执行以下命令修改 slaves 配置文件。

[root@master hadoop]# vim /usr/local/src/hadoop/etc/hadoop/slaves
#删除 localhost,加入以下配置信息
#slave1 主机 IP 地址
192.168.88.150
#slave2 主机 IP 地址
192.168.88.200

1.4.6.3. 步骤三:创建hadoop用户

[root@master hadoop]# useradd hadoop

1.4.6.4. 步骤四:修改目录权限

执行以下命令修改/usr/local/src/hadoop 目录的权限。

[root@master ~]# echo 'hadoop' | passwd --stdin hadoop
[root@master hadoop]# chown -R hadoop.hadoop /usr/local/src/hadoop/
[root@master hadoop]# ll /usr/local/src
total 0
drwxr-xr-x  11 hadoop hadoop 171 Mar 24 01:54 hadoop
drwxr-xr-x.  8 hadoop hadoop 255 Sep 14  2017 jdk

1.4.6.5. 步骤五:同步配置文件到 Slave 节点

上述配置文件全部配置完成以后,需要执行以下命令把 Master 节点上的
“/usr/local/src/hadoop”文件夹复制到各个 Slave 节点上,并修改文件夹访问权限。

(1)将 Master 上的 Hadoop 安装文件同步到 slave1、slave2。
[root@master hadoop]#cd
[root@master ~]# scp -r /usr/local/src/hadoop/ root@slave1:/usr/local/src/
[root@master ~]# scp -r /usr/local/src/hadoop/ root@slave2:/usr/local/src/
[root@master ~]# scp /etc/profile root@slave1:/etc/
root@slave1's password: 
profile                                                   100% 1989     1.0MB/s   00:00    
[root@master ~]# scp /etc/profile root@slave2:/etc/
root@slave2's password: 
profile                                                   100% 1989     1.1MB/s   00:00    


以下命令在所有的slave节点上执行。

(2)在每个 Slave 节点上创建Hadoop用户
[root@slave1 ~]# useradd hadoop

[root@slave2 ~]# useradd hadoop

(3)在每个 Slave 节点上修改/usr/local/src/hadoop 目录的权限。
slave1:
[root@slave1 ~]# echo 'hadoop' | passwd --stdin hadoop
Changing password for user hadoop.
passwd: all authentication tokens updated successfully.

[root@slave1 ~]# chown -R hadoop.hadoop /usr/local/src/hadoop/

[root@slave1 ~]# ll /usr/local/src
total 0
drwxr-xr-x. 11 hadoop hadoop 171 Mar 23 19:02 hadoop


slave2:
[root@slave2 ~]# echo 'hadoop' | passwd --stdin hadoop
Changing password for user hadoop.
passwd: all authentication tokens updated successfully.

[root@slave2 ~]# chown -R hadoop.hadoop /usr/local/src/hadoop/

[root@slave2 ~]# ll /usr/local/src
total 0
drwxr-xr-x. 11 hadoop hadoop 171 Mar 23 19:03 hadoop


(4)在每个 Slave 节点上切换到 hadoop 用户。
[root@slave1 ~]#su - hadoop
[root@slave2 ~]#su - hadoop

(5)使每个 Slave 节点上配置的 Hadoop 的环境变量生效。
[hadoop@slave1~]# source /etc/profile
[hadoop@slave2~]# source /etc/profile

1. 实验一:hadoop 集群运行

实验任务一:配置 Hadoop 格式化

步骤一:NameNode 格式化
[root@master ~]# su - hadoop
[hadoop@master ~]$ cd /usr/local/src/hadoop/ 

结果:

[hadoop@master ~]$ ./bin/hdfs namenode –format 
-bash: ./bin/hdfs: No such file or directory
[hadoop@master ~]$ cd /usr/local/src/hadoop/
[hadoop@master hadoop]$ ./bin/hdfs namenode –format 
22/03/30 16:46:38 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.64.128
************************************************************/
......

步骤二:启动 NameNode
[hadoop@master hadoop]$ hadoop-daemon.sh start namenode 
starting namenode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-namenode-master.out

实验任务二:查看 Java 进程

[hadoop@master hadoop]$ jps
2372 NameNode
2443 Jps

步骤一:slave 启动 DataNode
[hadoop@slave1 hadoop]$ hadoop-daemon.sh start datanode 
starting datanode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-datanode-slave1.out
[hadoop@slave2 hadoop]$ hadoop-daemon.sh start datanode
starting datanode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-datanode-slave2.out

[hadoop@slave1 hadoop]$ jps
2588 Jps
2511 DataNode
[hadoop@slave2 hadoop]$ jps
2402 Jps
2325 DataNode

步骤二:启动 SecondaryNameNode
[hadoop@master hadoop]$ hadoop-daemon.sh start secondarynamenode 
starting secondarynamenode, logging to /usr/local/src/hadoop/logs/hadoop-hadoop-secondarynamenode-master.out
[hadoop@master hadoop]$ jps
2372 NameNode
2519 Jps
2474 SecondaryNameNode

步骤三:查看 HDFS 数据存放位置
[hadoop@master hadoop]$ ll dfs/
total 0
drwxr-xr-x 2 hadoop hadoop  6 Mar 30 15:25 data
drwxr-xr-x 3 hadoop hadoop 40 Mar 30 16:48 name

实验任务三:查看 HDFS 的报告

[hadoop@master sbin]$ hdfs dfsadmin -report 
Configured Capacity: 36477861888 (33.97 GB)
Present Capacity: 30106460160 (28.04 GB)
DFS Remaining: 30106451968 (28.04 GB)
DFS Used: 8192 (8 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0

-------------------------------------------------
Live datanodes (2):

Name: 192.168.64.130:50010 (slave2)
Hostname: slave2
Decommission Status : Normal
Configured Capacity: 18238930944 (16.99 GB)
DFS Used: 4096 (4 KB)
Non DFS Used: 3185790976 (2.97 GB)
DFS Remaining: 15053135872 (14.02 GB)
DFS Used%: 0.00%
DFS Remaining%: 82.53%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Wed Mar 30 17:00:36 CST 2022


Name: 192.168.64.129:50010 (slave1)
Hostname: slave1
Decommission Status : Normal
Configured Capacity: 18238930944 (16.99 GB)
DFS Used: 4096 (4 KB)
Non DFS Used: 3185610752 (2.97 GB)
DFS Remaining: 15053316096 (14.02 GB)
DFS Used%: 0.00%
DFS Remaining%: 82.53%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Wed Mar 30 17:00:38 CST 2022

实验任务四:使用浏览器查看节点状态

可以使用 start-dfs.sh 命令启动 HDFS。这时需要配置 SSH 免密码登录,否则在启动过
程中系统将多次要求确认连接和输入 Hadoop 用户密码

[hadoop@master hadoop]$ stop-dfs.sh 
[hadoop@master hadoop]$ start-dfs.sh


步骤一:在 HDFS 文件系统中创建数据输入目录
[hadoop@master hadoop]$ start-yarn.sh


[hadoop@master sbin]$ jps
3425 Jps
3012 NameNode
3159 ResourceManager
2474 SecondaryNameNode


如果是第一次运行 MapReduce 程序,需要先在 HDFS 文件系统中创建数据输入目录,存
放输入数据。这里指定/input 目录为输入数据的存放目录

[hadoop@master hadoop]$ hdfs dfs -mkdir /input
[hadoop@master hadoop]$ hdfs dfs -ls / 
Found 1 items
drwxr-xr-x   - hadoop supergroup          0 2022-03-30 17:11 /input


此处创建的/input 目录是在 HDFS 文件系统中,只能用 HDFS 命令查看和操作。

步骤二:将输入数据文件复制到 HDFS 的/input 目录中

测试用数据文件仍然是上一节所用的测试数据文件~/input/data.txt,内容如下所示。

[hadoop@master ~]$ mkdir input
[hadoop@master ~]$ ls
input
[hadoop@master ~]$ vi input/data.txt
[hadoop@master ~]$ cat ~/input/data.txt
hello world
hello hadoop
hello huasan


执行如下命令,将输入数据文件复制到 HDFS 的/input 目录中:

[hadoop@master ~]$ hdfs dfs -put ~/input/data.txt /input 


确认文件已复制到 HDFS 的/input 目录:

[hadoop@master ~]$ hdfs dfs -ls /input
Found 1 items
-rw-r--r--   2 hadoop supergroup         38 2022-03-30 17:30 /input/data.txt


步骤三:运行 WordCount 案例,计算数据文件中各单词的频度。

运行 MapReduce 命令需要指定数据输出目录,该目录为 HDFS 文件系统中的目录,会自
动生成。如果在执行 MapReduce 命令前,该目录已经存在,则执行 MapReduce 命令会出错。
例如 MapReduce 命令指定数据输出目录为/output,/output 目录在 HDFS 文件系统中已经存
在,则执行相应的 MapReduce 命令就会出错。所以如果不是第一次运行 MapReduce,就要先
查看HDFS中的文件,是否存在/output目录。如果已经存在/output目录,就要先删除/output
目录,再执行上述命令。

自动创建的/output 目录在 HDFS 文件系统中,使用 HDFS 命令查看和操作。

[hadoop@master ~]$ hdfs dfs -mkdir /output 


先执行如下命令查看 HDFS 中的文件:

[hadoop@master ~]$ hdfs dfs -ls  /
Found 2 items
drwxr-xr-x   - hadoop supergroup          0 2022-03-30 17:30 /input
drwxr-xr-x   - hadoop supergroup          0 2022-03-30 17:31 /output


上述目录中/input 目录是输入数据存放的目录,/output 目录是输出数据存放的目录。
执行如下命令,删除/output 目录。

[hadoop@master ~]$ hdfs dfs -rm -r -f /output
22/03/30 17:32:45 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /output


执行如下命令运行 WordCount 案例:

[hadoop@master hadoop]$ hadoop jar share/hadoop/mapreduce/hadoopmapreduce-examples-2.7.1.jar  wordcount /input/data.txt /output 


MapReduce 程序运行过程中的输出信息如下所示

22/03/30 17:35:41 INFO client.RMProxy: Connecting to ResourceManager at localhost/192.168.64.128:8032 22/03/30 17:35:43 INFO input.FileInputFormat: Total input paths to process : 1 22/03/30 17:36:47 INFO mapreduce.JobSubmitter: number of splits:1 22/03/30 17:37:44 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1588469277215_0001 
......


查看 output 目录,如图 5-6 所示,发现有两个文件。文件_SUCCESS 表示处理成功,处
理的结果存放在 part-r-00000 文件中。在页面上不能直接查看文件内容,需要下载到本地
系统才行。

可以使用 HDFS 命令直接查看 part-r-00000 文件内容,结果如下所示:

[hadoop@master hadoop]$ hdfs dfs -cat /output/part-r-00000 
Hadoop 1 
Hello 3 
Huasan 1 
World 1


可以看出统计结果正确,说明 Hadoop 运行正常

实验任务五:停止 Hadoop

步骤一:停止 yarn
[hadoop@master hadoop]$ stop-yarn.sh


步骤二:停止 DataNode
[hadoop@slave1 hadoop]$ hadoop-daemon.sh stop datanode 
stopping namenode
[hadoop@slave2 hadoop]$ hadoop-daemon.sh stop datanode 
stopping namenode


步骤二:停止 NameNode
[hadoop@master hadoop]$ hadoop-daemon.sh stop namenode 
stopping namenode 


步骤三:停止 SecondaryNameNode
[hadoop@master hadoop]$ hadoop-daemon.sh stop secondarynamenode 
stopping secondarynamenode 


步骤四:查看 JAVA 进程,确认 HDFS 进程已全部关闭
[hadoop@master hadoop]$ jps  
3012 Jps 
30438 RunJar