Hadoop 3.x 集群部署:高可用配置与 YARN 资源调度优化(附脚本)
·
Hadoop 3.x 集群部署:高可用配置与 YARN 资源调度优化
一、高可用(HA)配置
Hadoop 高可用通过消除单点故障实现集群稳定性,需配置 Zookeeper + JournalNode 架构。
1. 核心组件
- NameNode HA:主备 NameNode 通过 JournalNode 同步元数据
- Zookeeper:管理故障转移(ZKFC)
- ResourceManager HA:主备 ResourceManager
2. 关键配置文件
<!-- hdfs-site.xml -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
</property>
<!-- core-site.xml -->
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1:2181,zk2:2181,zk3:2181</value>
</property>
3. 启停脚本
# 启动JournalNode集群
hdfs --daemon start journalnode
# 格式化ZKFC
hdfs zkfc -formatZK
# 启动HA集群
start-dfs.sh
二、YARN 资源调度优化
优化目标:提高资源利用率,降低延迟
1. 调度器选择
| 调度器 | 适用场景 | 配置示例 |
|---|---|---|
| Capacity | 多租户资源共享 | yarn.resourcemanager.scheduler.class=CapacityScheduler |
| Fair | 动态资源分配 | yarn.scheduler.fair.user-as-default-queue=false |
2. 关键参数优化
<!-- yarn-site.xml -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>16384</value> <!-- 物理内存80% -->
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value> <!-- 单容器最大内存 -->
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value> <!-- 关闭虚拟内存检查 -->
</property>
3. 容器优化公式 容器内存分配需满足: $$ \text{Container Memory} = \min \left( \text{CLUSTER_MAX}, \max \left( \text{MIN_ALLOC}, \lceil \frac{\text{TASK_MEM}}{\text{ALLOC_UNIT}} \rceil \times \text{ALLOC_UNIT} \right) \right) $$ 其中 $\text{ALLOC_UNIT}$ 为最小分配单元(默认1024MB)
三、部署脚本示例
1. 集群初始化脚本 (hadoop-init.sh)
#!/bin/bash
# 格式化HDFS
hdfs namenode -format -force
# 启动JournalNode
for node in {node1,node2,node3}; do
ssh $node "hdfs --daemon start journalnode"
done
# 初始化HA
hdfs zkfc -formatZK
hdfs --daemon start zkfc
2. YARN 优化检查脚本 (yarn-check.sh)
#!/bin/bash
# 检查资源利用率
yarn node -list | awk '{print $1,$4,$5}' > node_usage.txt
# 分析容器分配
yarn application -appStates ALL -list | grep -E "MEMORY|VCORES"
3. 故障转移测试脚本 (ha-test.sh)
#!/bin/bash
# 模拟主NameNode故障
kill -9 $(pgrep -f "NameNode")
# 验证自动切换(30秒内)
sleep 30
hdfs haadmin -getServiceState nn2 | grep "active"
四、验证步骤
-
HA验证:
hdfs haadmin -getServiceState nn1 # 应返回 standby hdfs haadmin -getServiceState nn2 # 应返回 active -
YARN优化验证:
yarn node -list # 检查内存分配是否符合配置 -
性能测试:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.x.x-tests.jar TestDFSIO -write -nrFiles 10 -size 1GB
注意:
- 所有节点需时间同步(NTP)
- SSH免密登录必须配置
- 防火墙开放端口:8020/8485/8088/2181
- 建议使用 Ansible 批量部署配置
更多推荐
所有评论(0)