# 运行模式-伪集群

# Pseudo-Distributed Operation(伪分布式模式)

# 1. 配置集群

# 1.1 修改Hadoop配置文件(hadoop-env.sh)

[leichu@localhost ~]$ vim /usr/local/hadoop-2.10.0/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_231
1
2

# 1.2 修改Hadoop配置文件(core-site.xml)

<!-- 官网文档说明:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml -->
<!-- 指定HDFS中NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/mnt/tmp/hadoop/data/tmp</value>
</property>
1
2
3
4
5
6
7
8
9
10
11

# 1.3 修改Hadoop配置文件(hdfs-site.xml)

<!-- 官网文档说明:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml -->
<!-- 指定HDFS副本的数量 -->
<property>
	<name>dfs.replication</name>
	<value>1</value>
</property>
1
2
3
4
5
6

# 2. 启动集群

## 格式化 NameNode (第一次启动时格式化,以后就不要总格式化)
[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hdfs namenode -format

## 启动 NameNode
[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/sbin/hadoop-daemon.sh start namenode

## 启动 DataNode
[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/sbin/hadoop-daemon.sh start datanode
1
2
3
4
5
6
7
8

# 3. 查看集群

## 查看是否启动成功 (jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps)
[leichu@localhost ~]$ jps
3360 NameNode
3557 Jps
3463 DataNode
1
2
3
4
5

# 4. web端 查看 HDFS 文件系统

## 浏览器访问(本地host文件修改 192.168.2.8 big001)
http://big001:50070
1
2

# 5. 查看日志

[leichu@localhost ~]$ ll /usr/local/hadoop-2.10.0/logs/
总用量 76
-rw-rw-r--. 1 leichu leichu 29052 74 16:27 hadoop-leichu-datanode-localhost.localdomain.log
-rw-rw-r--. 1 leichu leichu   716 74 16:27 hadoop-leichu-datanode-localhost.localdomain.out
-rw-rw-r--. 1 leichu leichu 33321 74 16:27 hadoop-leichu-namenode-localhost.localdomain.log
-rw-rw-r--. 1 leichu leichu   716 74 16:26 hadoop-leichu-namenode-localhost.localdomain.out
-rw-rw-r--. 1 leichu leichu     0 74 16:26 SecurityAuth-leichu.audit
1
2
3
4
5
6
7

# 6. 操作集群

# 6.1 在 HDFS 文件系统上创建一个 input 文件夹

[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hdfs dfs -mkdir -p /user/leichu/input
1

# 6.2 将测试内容上传到 HDFS 文件系统上

[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hdfs dfs -put test/wcinput/wx.txt /user/leichu/input
1

# 6.3 查看 上传的文件是否正确

[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hdfs dfs -ls /user/leichu/input
Found 1 items
-rw-r--r--   1 leichu supergroup         79 2020-07-04 16:41 /user/leichu/input/wx.txt
[leichu@localhost ~]$ 
[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hdfs dfs -cat /user/leichu/input/wx.txt
hello world
hello kitty
hello
hello hadoop
hello hadoop
hello hdfs
hello spark
1
2
3
4
5
6
7
8
9
10
11
12

# 6.4 运行 MapReduce 程序

[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hadoop jar /usr/local/hadoop-2.10.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount /user/leichu/input /user/leichu/output
1

# 6.5 查看输出结果

[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hdfs dfs -cat /user/leichu/output/*
hadoop	2
hdfs	1
hello	7
kitty	1
spark	1
world	1
1
2
3
4
5
6
7

# 6.6 将测试的结果文件下载到本地

[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hdfs dfs -get /user/leichu/output/* ./
[leichu@localhost ~]$ 
[leichu@localhost ~]$ ll
总用量 8
-rw-r--r--. 1 leichu leichu   48 74 16:54 part-r-00000
-rw-r--r--. 1 leichu leichu    0 74 16:54 _SUCCESS
1
2
3
4
5
6

# 6.7 删除输出结果

[leichu@localhost ~]$ /usr/local/hadoop-2.10.0/bin/hdfs dfs -rm -r /user/leichu/output
Deleted /user/leichu/output
1
2

# 7. 启动 YARN 并运行 MapReduce 程序

[leichu@big001 ~]$ cd /usr/local/hadoop-2.10.0/etc/hadoop/
1

# 7.1. 修改 YARN 配置文件 (yarn-env.sh)

[leichu@localhost ~]$ vim yarn-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_231
1
2

# 7.2. 修改 YARN 配置文件 (yarn-site.xml)

[leichu@localhost ~]$ vim yarn-site.xml
1
<configuration>
    <!-- Reducer获取数据的方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>big001</value>
    </property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12

# 7.3. 修改 MR 配置文件(mapred-env.sh)

[leichu@big001 ~]$ vim mapred-env.sh 
export JAVA_HOME=/usr/local/jdk1.8.0_231
1
2

# 7.4. 修改 MR 配置文件(mapred-site.xml,先对mapred-site.xml.template重新命名为mapred-site.xml)

<configuration>
    <!-- 指定MR运行在YARN上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
1
2
3
4
5
6
7

# 7.5. 启动集群 (启动前必须保证NameNode和DataNode已经启动)

[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/hadoop-daemon.sh start namenode
[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/hadoop-daemon.sh start datanode

[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/yarn-daemon.sh start resourcemanager
[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/yarn-daemon.sh start nodemanager
1
2
3
4
5

# 7.6. 集群操作 (执行测试程序)

# 7.6.1 YARN 的浏览器页面查看,访问 http://big001:8088/cluster

# 7.6.2 执行测试的 MapReduce 程序

[leichu@big001 ~]$ hadoop jar /usr/local/hadoop-2.10.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount /user/leichu/input /user/leichu/output
## 注意: 上面命令中的 /user/leichu/input 和 /user/leichu/output 是 HDFS 中的路径。并且,执行前要删除目录 /user/leichu/output
1
2

# 7.6.3 从 http://big001:8088/cluster 中打开 当前正在执行的程序 http://big001:8088/cluster/app/application_1593909777898_0001

# 7.7. 配置历史服务(为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下)

# 7.7.1 修改配置文件(mapred-site.xml),在 mapred-site.xml 中增加下面的配置

<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>big001:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>big001:19888</value>
</property>
1
2
3
4
5
6
7
8
9
10

# 7.7.2 启动历史服务

[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /usr/local/hadoop-2.10.0/logs/mapred-leichu-historyserver-big001.out
1
2

# 7.7.3 查看历史服务器是否启动

[leichu@big001 ~]$ jps
1

# 7.7.4 查看 JobHistory:访问 http://big001:19888/jobhistory

# 8. 配置日志聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager。

# 8.1 修改 yarn-site.xml,在文件中添加下面的配置项

[leichu@big001 ~]$ vim /usr/local/hadoop-2.10.0/etc/hadoop/yarn-site.xml 
1
<!-- 日志聚集功能使能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>

<!-- 日志保留时间设置7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
1
2
3
4
5
6
7
8
9
10
11

# 8.2 关闭 NodeManager 、ResourceManager 和 HistoryManager

[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/yarn-daemon.sh stop nodemanager
[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/yarn-daemon.sh stop resourcemanager
[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/mr-jobhistory-daemon.sh stop historyserver
1
2
3

# 8.3 启动 NodeManager 、ResourceManager 和 HistoryManager

[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/yarn-daemon.sh start nodemanager
[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/yarn-daemon.sh start resourcemanager
[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/sbin/mr-jobhistory-daemon.sh start historyserver
1
2
3

# 8.4 删除 HDFS 上已经存在的输出文件目录

[leichu@big001 ~]$ /usr/local/hadoop-2.10.0/bin/hdfs dfs -rm -R /user/leichu/output
Deleted /user/leichu/output
1
2

# 8.5 执行测试程序

[leichu@big001 ~]$ hadoop jar /usr/local/hadoop-2.10.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount /user/leichu/input /user/leichu/output
1

# 8.6 查看日志: 访问 http://big001:19888/jobhistory

更新时间: 2021-05-05 21:07:37