Hadoop学习笔记-入门(5)-集群启动

集群配置

在配置集群之前,我们首先需要明确集群部署的规划,这里有几点需要注意的地方:

  • NameNode和SecondaryNameNode不要安装在同一台服务器上
  • ResoureManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台服务器上

于是在我们现有的三台机器hadoop102、hadoop103、hadoop104的基础上,进行如下的部署规划:

节点 HDFS Yarn
hadoop102 NameNode、DataNode NodeManager
hadoop103 DataNode ResourceManager、NodeManager
hadoop104 SecondaryNameNode、DataNode NodeManager

hadoop在服务器端的配置文件分为两大部分,一部分是默认的配置文件,另一部分是用户自定义的配置文件。自定义的配置文件中配置的内容的优先级要高于默认配置文件的内容。

配置文件一共有四个,分别是core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml,其中自定义配置文件可以在路径$HADOOP_HOME/etc/hadoop路径中找到。

之后,对自定义配置文件做如下配置。

  • 核心配置文件(core-site.xml)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <configuration>
    <!-- 指定 NameNode 的地址 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop102:8020</value>
    </property>
    <!-- 指定 hadoop 数据的存储目录 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-3.1.3/data</value>
    </property>
    <!-- 配置 HDFS 网页登录使用的静态用户为 syh -->
    <property>
    <name>hadoop.http.staticuser.user</name>
    <value>syh</value>
    </property>
    </configuration>
  • HDFS配置文件(hdfs-site.xml)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <configuration>
    <!-- nn web 端访问地址-->
    <property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop102:9870</value>
    </property>
    <!-- 2nn web 端访问地址-->
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop104:9868</value>
    </property>
    </configuration>
  • Yarn配置文件(yarn-site.xml)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <configuration>
    <!-- 指定 MR 走 shuffle -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定 ResourceManager 的地址-->
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop103</value>
    </property>
    <!-- 环境变量的继承 -->
    <property>
    <name>yarn.nodemanager.env-whitelist</name>

    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
    RED_HOME</value>
    </property>
    </configuration>

  • MapReduce配置文件(mapred-site.xml)

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

之后将配置好的集群文件分发到其他两台服务器上(三台服务器中都需要配置相同内容)。

集群启动

1. 命令行启动

启动集群之前,需要配置workers文件,路径为$HADOOP_HOME/etc/hadoop/workers,其中增加所有的节点名称,即

1
2
3
hadoop102
hadoop103
hadoop104
  • 文件内容中不允许有空格,空行等,因为每一行都会被解析成hostname的名称,需要完全匹配
  • workers文件同样需要进行分发,在三台服务器上都需要进行配置

之后就可以进行集群的启动。

  1. 如果是第一次启动集群,那么需要在NameNode(hadoop102)上进行节点的格式化

    1
    2
    cd $HADOOP_HOME
    hdfs namenode -format
  2. 启动HDFS

    1
    2
    cd $HADOOP_HOME
    sbin/start-dfs.sh
  3. 启动Yarn(在ResourceManager(hadoop103)上启动)

    1
    2
    cd $HADOOP_HOME
    sbin/start-yarn.sh

这样就完成了集群的启动,可以使用jps命令查看启动情况,也可以在浏览器中查看对应的数据信息:

  1. web端查看HDFS的NameNodehttp://hadoop102:9870
  2. web端查看Yarn的ResourceManagerhttp://hadoop103:8088

2. 历史服务器和日志聚集的配置

为了查看程序的历史运行情况,需要进行历史服务器的配置。

历史服务器的配置在mapred-site.xml配置文件中进行,在该文件中添加如下配置

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

同样需要将配置文件对其他两台服务器进行分发。

之后再配置了历史服务器的服务器上进行启动

1
mapred --daemon start historyserver

启动失败的话检查一下代码,是不是history写错了(history中的r和o总喜欢换位置的人路过)

同样可以利用jps命令进行查看是否启动正确。

配置完了历史服务器之后,还需要对日志聚集服务进行配置。在hadoop运行的过程中,每台服务器上都会产生运行的日志。日志聚集的概念就是将所有服务器的日志聚集上传到HDFS系统上。

开启日志聚集功能,需要重新启动NodeManager、ResourceManager和HistoryServer。

开启日志聚集功能首先需要配置yarn-site.xml文件,在该配置文件中添加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 开启日志聚集功能 -->
<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>

将配置文件分发给其他两台服务器。之后对NodeManager、ResourceManager和HistoryServer进行关闭再启动。

1
2
3
4
5
6
cd $HADOOP_HOME
sbin/stop-yarn.sh
mapred --daemon stop historyserver

start-yarn.sh
mapred --daemon start historyserver

之后可以通过web端访问历史服务器http://hadoop102:19888并查看运行日志。

3. 集群启动和停止

  • 可以通过命令行方式对集群启动和停止

各个模块分开启动

1
2
start-dfs.sh/stop-dfs.sh
start-yarn.sh/stop-yarn.sh

各个服务组件逐一启动

1
2
hdfs --daemon start/stop namenode/datanode/secondarynamenode
yarn --daemon start/stop resourcemanager/nodemanager
  • 也可以通过编写脚本来启动

将脚本写在之前配置过的~/bin目录下,因为这个目录已经加入到环境变量中了

hadoop集群启动和停止脚本:myhadoop.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/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

查看所有节点jps脚本:jpsall

1
2
3
4
5
6
7
#!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done

当然要给脚本执行权限

1
2
chmod +x myhadoop.sh
chmod +x jpsall

将更新的~/bin目录进行分发,使得在每个服务器上都能使用

常用端口号和配置文件说明

常用端口号:

端口名称 Hadoop2.x Hadoop3.x
NameNode内部通信端口 8020 / 9000 8020 / 9000 / 9820
NameNode HTTP访问端口 50070 9870
MapReduce查看任务端口 8088 8088
历史服务器通信端口 19888 19888

需要的配置文件

  • 3.x:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers
  • 2.x:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slaves

Hadoop学习笔记-入门(5)-集群启动
http://example.com/2022/02/18/Hadoop学习笔记-入门-5-集群启动/
作者
EverNorif
发布于
2022年2月18日
许可协议