Ubuntu 上 HDFS 的资源调度与管理实践
在 Hadoop 生态中,HDFS 负责分布式存储,YARN 负责集群资源管理与调度。实际生产环境中通常在 Ubuntu 20.04/22.04 上部署,通过 YARN 的调度器对 CPU、内存 等资源进行分配,并结合 HDFS 的存储策略保障性能与可靠性。
架构与职责
- HDFS:由 NameNode(管理元数据与块映射)与 DataNode(存储数据块)构成,默认副本因子为 3,面向高吞吐的批处理场景。
- YARN:由 ResourceManager(全局资源调度)与 NodeManager(单节点资源与容器管理)构成,承载 MapReduce/Spark 等计算框架的资源请求与隔离。
YARN 资源调度配置步骤(Ubuntu)
- 配置计算框架使用 YARN:在 $HADOOP_HOME/etc/hadoop/mapred-site.xml 设置
- mapreduce.framework.name 为 yarn。
- 配置 NodeManager 资源容量:在 yarn-site.xml 设置
- yarn.nodemanager.resource.memory-mb(如:8192 MB)
- yarn.nodemanager.resource.cpu-vcores(如:8)
- yarn.nodemanager.aux-services 为 mapreduce_shuffle
- yarn.nodemanager.aux-services.mapreduce.shuffle.class 为 org.apache.hadoop.mapred.ShuffleHandler
- 配置 ResourceManager 调度边界与队列:在 yarn-site.xml 设置
- yarn.scheduler.minimum-allocation-mb(如:1024 MB)
- yarn.scheduler.maximum-allocation-mb(如:8192 MB)
- 配置容量调度器队列(capacity-scheduler.xml):定义多租户/多队列与容量
- yarn.scheduler.capacity.root.queues(如:default,queue1,queue2)
- yarn.scheduler.capacity.root.queue.default.capacity(如:50)
- yarn.scheduler.capacity.root.queue.queue1.capacity(如:30)
- yarn.scheduler.capacity.root.queue.queue2.capacity(如:20)
- 启动与验证
- 启动:start-dfs.sh、start-yarn.sh
- 验证进程:jps(应见 NameNode、DataNode、ResourceManager、NodeManager)
- 查看 YARN Web:http://:8088
- 查看节点资源:yarn node -list;查看应用:yarn application -list/-status/-kill 。
HDFS 存储与数据布局优化(配合资源调度)
- 块大小:默认 128MB,大文件/长任务可增大(如 256MB)以减少 NameNode 元数据与任务数;小文件密集场景可适当减小(如 64MB)。配置项:dfs.blocksize。
- 副本因子:默认 3,可靠性优先;测试/容量紧张环境可降为 1(权衡容错)。命令:hdfs dfs -setrep 3 /path。
- 小文件治理:合并为 HAR/SequenceFile,降低 NameNode 压力。命令:hadoop archive -archiveName my.har -p /user/input /user/output。
- 数据本地化:在作业侧设置等待本地数据的超时(如 mapreduce.job.locality.wait),减少跨节点网络开销。
- 压缩:中间与输出启用 Snappy/LZO 等压缩(如 mapreduce.map.output.compress、mapreduce.output.fileoutputformat.compress),降低 I/O 与网络。
- 存储介质:将 HDFS 数据目录配置在 SSD/NVMe 上可显著提升读写性能(视预算与节点规划)。
监控 运维与容量管理
- 集群健康与容量
- HDFS:hdfs dfsadmin -report(节点与存储使用)、hdfs fsck /path -files -blocks(块分布与健康)、hdfs dfs -du/-count(目录用量)。
- YARN:yarn node -list(节点资源)、yarn application -list/-status/-kill(应用生命周期)。
- 可视化与告警
- YARN Web:8088;HDFS NameNode Web:50070;SecondaryNameNode:50090(如启用)。
- 结合 Prometheus/Ganglia 与日志分析,持续观测 GC、网络、磁盘、队列排队 等指标并调参。
- 日常维护
- 启用回收站:fs.trash.interval=1440(分钟),误删可于 /user/.Trash/Current 恢复。
- 数据均衡:使用 start-balancer.sh 平衡块分布,避免热点与容量倾斜。
快速排障清单
- 资源不足或容器申请失败:核对 yarn.nodemanager.resource.memory-mb/cpu-vcores 与 yarn.scheduler.minimum/maximum-allocation-mb 的上下界是否合理,必要时调整队列容量或应用并发度。
- 应用长时间等待调度:检查 队列配额/容量 与 数据本地化 设置,适当增大 locality.wait 或优化数据布局。
- 小文件导致 NameNode 压力大:合并为 HAR/SequenceFile,并考虑增大 dfs.blocksize 减少文件数量。
- 磁盘或网络瓶颈:核对 DataNode 数据目录是否在 SSD、集群网络带宽是否充足,并结合监控定位热点节点。