1.前言
本文档适用于Hadoop3.x版本分布式测试集群搭建。
HDFS组件包括:NameNode、DataNode、SecondaryNameNode
Yarn组件包括:ResourceManager、NodeManager
MapReduce组件包括:JobHistoryServer
2. 集群搭建前提条件
- 关闭防火墙
- 确保集群主机节点时间同步(可以安装ntp服务保持集群时间同步)
- 集群间配好免密,包括免密本地登录(不配置有可能导致namenode和nodemananger启动不起来)
- 安装JDK,要求jdk1.8(先删除linux自带openjdk)
#查询openjdk
rpm -qa|grep java
#删除查询出来的openjdk
sudo rpm -e --nodeps java-1.8.0-openjdk..
#自行安装JDK
略
- 主机名设置为全域名,例如:hd1.wdh.com
#示例:修改主机域名
sudo hostnamectl set-hostname hd1.wdh.com
#查验
hostname
返回:hd1.wdh.com
#修改hosts文件
略
3. 实验环境
三节点Hadoop集群
IP地址 | 主机名 | 组件 |
10.97.63.76 | hd1.wdh.bcdpdev.svc.cluster.local | NameNode、DataNode、NodeManager、JobHistoryServer |
10.98.98.146 | hd2.wdh.bcdpdev.svc.cluster.local | DataNode、ResourceManager、NodeManager |
10.100.0.26 | hd3.wdh.bcdpdev.svc.cluster.local | SecondryNameNode、DataNode、NodeManager |
- NameNode和SecondaryName不要放在一个节点上,SecondaryName作为元数据备份,保证NameNode节点挂掉,SecondaryName可用于恢复元数据。
- ResourceManager不要和NameNode、SecondaryName不要放在一个节点上,都比较耗费内存,放在一起不合适。
4.搭建过程
4.1下载hadoop包
从官网下载hadoop3.3.1的tar包,并上传解压到每个节点服务器上。
本次实验Hadoop服务器路径为:/opt/module/hadoop-3.3.1
4.2 添加Hadoop环境变量
# 每个节点添加hadoop环境变量
sudo vim /etc/profile.d/my_env.sh
#内容如下:
export JAVA_HOME=/opt/module/jdk1.8.0_291
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
#使生效
source /etc/profile
#验证
hadoop version
4.3 修改配置文件
Hadoop集群有默认四个配置文件,包含了集群的默认配置,分别是core-default.xml、hdfs-default.xml,yarn-default.xml,mapred-default.xml。
此外用户可自定义配置四大配置文件,覆盖默认配置文件内容,分别是:core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml。
修改hd1节点hadoop配置:
cd $HADOOP_HOME/etc/hadoop
4.3.1 core-site.xml
vim core-site.xml
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hd1.wdh.bcdpdev.svc.cluster.local:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/beh-hadoop-3.3.1/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为dev -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>dev</value>
</property>
</configuration>
4.3.2 hdfs-site.xml
vim hdfs-site.xml
<configuration>
<!-- Namenode web端http访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hd1.wdh.bcdpdev.svc.cluster.local:9870</value>
</property>
<!-- SecondaryNameNode web端http访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hd3.wdh.bcdpdev.svc.cluster.local:9868</value>
</property>
</configuration>
4.3.3 yarn-site.xml
vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hd2.wdh.bcdpdev.svc.cluster.local</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_MAPRED_HOME</value>
</property>
</configuration>
4.3.4 mapred-site.xml
vim mapred-site.xml
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR任务历史服务器服务端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hd1.wdh.bcdpdev.svc.cluster.local:10020</value>
</property>
<!-- MR任务历史服务器web前端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hd1.wdh.bcdpdev.svc.cluster.local:19888</value>
</property>
</configuration>
4.3.5 workers
vim workers , 将节点主机名写入
hd1.wdh.bcdpdev.svc.cluster.local
hd2.wdh.bcdpdev.svc.cluster.local
hd3.wdh.bcdpdev.svc.cluster.local
4.4 同步配置文件
将配置文件core-site.xml、mapred-site.xml、hdfs-site.xml、yarn-site.xml、workers同步到所有节点hadoop配置中,scp或者sync命令即可。
4.5 启动Hadoop集群
4.5.1 格式化NameNode节点
Hadoop集群第一次启动时,需要进行NameNode格式化。后续集群启动不需要格式化,多次格式化会导致NameNode 的id和 DataNode记录的id不一致,导致集群找不到元数据。如果需要重新格式化,则先停止所有节点的NameNode和DataNode,并删除所有机器的data和logs目录,然后再进行格式化。
在hd1.wdh.bcdpdev.svc.cluster.local节点执行格式化操作:
hdfs namenode -format
无报错,且$HADOOP_HOME目录中多了data和log目录代表格式化成功。
4.5.2 启动集群
cd $HADOOP_HOME/sbin
在namenode节点启动hdfs:
./start_dfs.sh
启动成功后,访问hdfs web页面:hd1.wdh.bcdpdev.svc.cluster.local:9870
在resourcemanager节点启动yarn:
./start_yarn.sh
启动成功后,访问yarn web页面:hd2.wdh.bcdpdev.svc.cluster.local:8088
在jobhistory节点启动jobhistory:
mapred --daemon start historyserver
启动成功后,访问MR任务历史服务器:hd1.wdh.bcdpdev.svc.cluster.local:19888
查看进程情况:jps ,看每个节点是否包含相应组件进程:
IP地址 | 主机名 | 组件 |
10.97.63.76 | hd1.wdh.bcdpdev.svc.cluster.local | NameNode、DataNode、NodeManager、JobHistoryServer |
10.98.98.146 | hd2.wdh.bcdpdev.svc.cluster.local | DataNode、ResourceManager、NodeManager |
10.100.0.26 | hd3.wdh.bcdpdev.svc.cluster.local | SecondryNameNode、DataNode、NodeManager |
如果节点上进程不匹配,说明hadoop集群则有问题不能使用,需要自行排查问题,可根据启动提示或者启动日志查看相应报错。
4.6 测试功能
4.6.1 测试HDFS功能
#创建一个目录
hadoop fs -mkdir /wcinput
#随意上传一个文件,例如wordcount.txt
hadoop fs -put ./wordcount.txt /wcinput
HDFS页面查看上传情况:
4.6.2 测试Yarn功能
#跑一个wordcount MapReduce测试用例,统计文本中每个英文单词出现的个数
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /wcinput /wcoutput
HDFS页面查看/wcoutput目录下的结果即可。