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"


四、验证步骤
  1. HA验证

    hdfs haadmin -getServiceState nn1  # 应返回 standby
    hdfs haadmin -getServiceState nn2  # 应返回 active
    

  2. YARN优化验证

    yarn node -list  # 检查内存分配是否符合配置
    

  3. 性能测试

    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 批量部署配置

更多推荐