温馨提示×

Hadoop在Ubuntu上的资源管理

小樊
40
2025-11-27 03:19:48
栏目: 智能运维

Hadoop在Ubuntu上的资源管理实践

一 核心概念与容量规划

  • 资源模型:由 YARN 统一管理集群资源,核心资源为 内存(MB)CPU 虚拟核(vcores)。NodeManager 上报可用资源,ResourceManager 按队列与调度策略分配容器(Container)。
  • 容量规划步骤:
    • 明确节点总内存与已用内存,保留系统与安全余量(建议预留 10%–20%)。
    • 设置 yarn.nodemanager.resource.memory-mb 为节点可分配给 YARN 的内存总量。
    • 设置 yarn.nodemanager.resource.cpu-vcores 为可分配给 YARN 的 vcores 数(通常不超过物理核心数)。
    • 结合作业类型(CPU 密集或 I/O 密集)与并发度,规划容器规格与数量,避免资源碎片与过度切分。

二 关键配置与示例

  • 计算资源与容器规格
    • 容器内存上限:yarn.scheduler.maximum-allocation-mb
    • 容器内存下限:yarn.scheduler.minimum-allocation-mb
    • 容器 vcores 上限:yarn.scheduler.maximum-allocation-vcores
    • 容器 vcores 下限:yarn.scheduler.minimum-allocation-vcores
    • 建议:让“容器规格”为“节点资源”的整数约数,减少碎片;Map/Reduce 的 JVM 堆建议设置为“容器内存 × 0.8”左右,留出堆外与本地缓存空间。
  • 存储与 I/O
    • HDFS 块大小:dfs.blocksize(默认 128MB,可按数据规模与访问模式调至 256MB 或更高以减少小文件与元数据压力)。
    • 数据副本:dfs.replication(多节点环境常用 3,单机或测试可设为 1)。
  • 示例配置(单节点或伪分布式,便于起步)
    • yarn-site.xml
      <configuration>
        <property>
          <name>yarn.nodemanager.resource.memory-mb</name>
          <value>8192</value>
        </property>
        <property>
          <name>yarn.nodemanager.resource.cpu-vcores</name>
          <value>8</value>
        </property>
        <property>
          <name>yarn.scheduler.minimum-allocation-mb</name>
          <value>1024</value>
        </property>
        <property>
          <name>yarn.scheduler.maximum-allocation-mb</name>
          <value>4096</value>
        </property>
        <property>
          <name>yarn.scheduler.minimum-allocation-vcores</name>
          <value>1</value>
        </property>
        <property>
          <name>yarn.scheduler.maximum-allocation-vcores</name>
          <value>4</value>
        </property>
        <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
        </property>
      </configuration>
      
    • hdfs-site.xml
      <configuration>
        <property>
          <name>dfs.replication</name>
          <value>1</value>
        </property>
        <property>
          <name>dfs.blocksize</name>
          <value>268435456</value> <!-- 256MB -->
        </property>
      </configuration>
      
    • mapred-site.xml
      <configuration>
        <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
        </property>
        <property>
          <name>mapreduce.map.java.opts</name>
          <value>-Xmx2048m</value>
        </property>
        <property>
          <name>mapreduce.reduce.java.opts</name>
          <value>-Xmx2048m</value>
        </property>
        <property>
          <name>mapreduce.map.output.compress</name>
          <value>true</value>
        </property>
        <property>
          <name>mapreduce.output.fileoutputformat.compress</name>
          <value>true</value>
        </property>
      </configuration>
      
    以上关键项与取值思路可显著提升资源利用率与作业稳定性,并兼顾 I/O 与网络开销。

三 日常运维与监控

  • 集群与节点健康
    • 查看 HDFS 健康与容量:hdfs dfsadmin -report
    • 查看 YARN 应用列表与状态:yarn application -listyarn application -status
    • 终止异常作业:yarn application -kill
  • Web 界面
    • HDFS NameNode:http://:9870
    • YARN ResourceManager:http://:8088
  • 观察要点
    • 队列与应用的 Pending/Running 状态、容器分配与失败重试。
    • NodeManager 的 内存与 vcores 使用率、磁盘与网络 I/O。
    • 是否存在大量 Map/Reduce 失败、数据本地化率低等问题。

四 作业级调优要点

  • 并行度与数据布局
    • 合理设置 mapreduce.job.maps/reduces 或基于数据规模与分片策略控制并发;提高 dfs.blocksize 可降低小文件与元数据压力。
  • 数据本地化
    • 通过 mapreduce.job.locality.wait 控制任务等待本地数据的时长,尽量在数据所在节点执行 Map 任务,减少网络传输。
  • 压缩与 I/O
    • 启用中间与输出压缩:mapreduce.map.output.compressmapreduce.output.fileoutputformat.compress,减少磁盘与网络开销。
  • JVM 与内存
    • 结合容器内存设置 mapreduce.{map|reduce}.java.opts,通常将堆设为容器内存的 70%–80%,避免 OOM 与频繁 GC。
  • 调度与队列
    • 通过 yarn.scheduler.minimum/maximum-allocation-mbyarn.scheduler.minimum/maximum-allocation-vcores 控制容器规格上下限,减少资源碎片并提升吞吐。

五 快速排障清单

  • 容器申请被拒或长时间 Pending:检查 yarn.scheduler.maximum-allocation-mb/vcores 是否过小、集群资源是否充足、队列配额是否受限。
  • Map/Reduce 频繁失败或 GC 过长:核对 mapreduce.{map|reduce}.java.opts 与容器内存匹配,适当增大堆或降低并发度。
  • 数据本地化率低:观察作业本地化分布,适当增大 mapreduce.job.locality.wait,并排查数据分布与节点健康。
  • 磁盘或网络瓶颈:结合 dfs.replicationdfs.blocksize 调整数据布局与副本策略,必要时使用更快存储(如 SSD)优化 I/O。

0