完全分布式运行模式
一、群起集群
1、配置workers
[user@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在文件中添加如下内容:
hadoop102
hadoop103
hadoop104
2、启动集群
(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode
[user@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
(2)Web端查看HDFS的NameNode
- 输入网址:http://hadoop102:9870
- 查看HDFS上存储的数据信息
(3)在配置了ResourceManager的节点hadoop103启动YARN
[user@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(4)Web端查看YARN的ResourceManager
- 输入网址:http://hadoop103:8088
- 查看YARN上运行的Job信息
3、集群基本测试
(1)创建一个目录,查看web端变化
[user@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /wcinput
(2)上传小文件
[user@hadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /wcinput
- 此时web端能看到上传的文件
- 打开文件查看内容
- 可以点击Download进行下载
(3)上传大文件到根目录
[user@hadoop102 hadoop-3.1.3]$ hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /
- 这个web端只是展示数据,实际数据存储在DataNode
(4)查看文件存储在什么位置
- 查看HDFS在磁盘存储文件内容
[user@hadoop102 subdir0]$ cat blk_1073741828
SEVENTEEN
SEVENTEEN
HOME
HOT
HEADLINER
ROCK
WITH
YOU
SEVENTEEN
- 查看HDFS文件存储路径
[user@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-2039324645-192.168.10.102-1726192446950/current/finalized/subdir0/subdir0
(5)执行一个wordcount程序,查看YARN情况
- 上传数据不涉及到YARN,YARN与资源的调度有关,当涉及MapReduce这类计算任务时才会执行
- 集群模式运行,路径也得是集群的路径
[user@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput
- 此时也可以在HDFS web端查看运行结果文件
二、配置历史服务器
- 为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
1、配置mapred-site.xml
[user@hadoop102 hadoop-3.1.3]$ cd etc/hadoop/
[user@hadoop102 hadoop]$ vim mapred-site.xml
在文件里添加:
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
2、分发配置
[user@hadoop102 hadoop]$ xsync mapred-site.xml
3、在hadoop102启动历史服务器
[user@hadoop102 hadoop-3.1.3]$ bin/mapred --daemon start historyserver
[user@hadoop102 hadoop-3.1.3]$ jps
16785 Jps
16710 JobHistoryServer
11386 NameNode
11515 DataNode
16252 NodeManager
4、查看JobHistory
http://hadoop102:19888/jobhistory
三、配置日志的聚集
1、日志聚集的概念
应用运行完成以后,将程序运行日志信息上传到HDFS系统上
- 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试
- 开启日志聚集功能,需要重新启动NodeManager、ResourceManager和HistoryServer。
2、实现过程
(1)配置yarn-site.xml
[user@hadoop102 hadoop]$ vim yarn-site.xml
添加如下内容:
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
(2)分发配置
[user@hadoop102 hadoop]$ xsync yarn-site.xml
(3)关闭NodeManager、ResourceManager和HistoryServer
[user@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[user@hadoop103 hadoop-3.1.3]$ mapred --daemon stop historyserver
(4)启动NodeManager、ResourceManage和HistoryServer
[atguigu@hadoop103 ~]$ start-yarn.sh
[atguigu@hadoop102 ~]$ mapred --daemon start historyserver
(5)重新执行一次程序就能看到运行日志详情
四、集群启动/停止方式总结
1、各个模块分开启动/停止(前提是配置SSH)
- 整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
- 整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
2、各个服务组件逐一启动/停止
- 分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
- 启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
五、编写Hadoop集群常用脚本
1、Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
[user@hadoop102 ~]$ cd /home/user/bin
[user@hadoop102 bin]$ vim myhadoop.sh
- 输入如下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
- 赋予脚本执行权限
[user@hadoop102 bin]$ chmod 777 myhadoop.sh
2、查看三台服务器Java进程脚本:jpsall
[user@hadoop102 ~]$ cd /home/user/bin
[user@hadoop102 bin]$ vim jpsall
- 输入如下内容:
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
- 赋予脚本执行权限
[user@hadoop102 bin]$ chmod 777 jpsall
3、分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用
[user@hadoop102 ~]$ xsync /home/user/bin/
六、常用端口号说明
端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce 查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 1988 |
七、集群时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准
1、需求
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。
2、虚拟机联网,会定期更新时间,所以可以不用进行集群时间同步