Ubuntu环境下Hadoop资源管理指南
Hadoop资源管理的核心是通过合理配置集群参数、优化资源调度策略及监控系统状态,实现CPU、内存、存储及网络资源的高效利用,提升集群整体性能。以下是具体管理方法:
yarn.nodemanager.resource.cpu-vcores需设置为物理核心数(避免超线程导致的资源竞争)。yarn.nodemanager.resource.memory-mb需匹配节点总内存(扣除系统预留1-2GB);MapReduce任务的mapreduce.map.memory.mb(默认1GB)、reduce.memory.mb(默认2GB)需根据任务复杂度调整(如复杂计算任务可增至4GB)。dfs.blocksize)根据数据规模调整(如128MB-256MB,默认128MB),大块减少元数据操作,适合大文件;小块适合小文件但增加元数据负载。dfs.replication:根据集群规模设置副本数(生产环境建议3副本,测试环境可设为1以节省存储);dfs.namenode.name.dir/dfs.datanode.data.dir:指定NameNode/Datanode数据存储路径(多路径可提升IO吞吐,如/data1/hdfs/name,/data2/hdfs/name)。yarn.nodemanager.resource.memory-mb:NodeManager可分配的总内存(如8GB);yarn.scheduler.minimum-allocation-mb/maximum-allocation-mb:容器资源分配的最小(如1GB)/最大(如8GB)值,避免资源碎片化;yarn.nodemanager.aux-services:设置为mapreduce_shuffle(MapReduce shuffle服务的必需配置)。mapreduce.framework.name:设置为yarn(启用YARN作为资源管理框架);mapreduce.map.memory.mb/reduce.memory.mb:Map/Reduce任务的内存分配(需与YARN容器配置一致,如Map任务2GB、Reduce任务4GB);mapreduce.map.java.opts/reduce.java.opts:JVM堆大小(通常为任务内存的70%,如Map任务-Xmx1400m)。YARN提供三种调度器,需根据集群使用场景选择:
default、hadoop、spark),每个队列分配最低资源保证(如hadoop队列占30%资源)和最高资源上限(如不超过50%)。剩余资源可临时分配给其他队列,适合多团队共享集群(如数据团队、AI团队)。配置文件为capacity-scheduler.xml,示例:<property>
<name>yarn.scheduler.capacity.root.hadoop.capacity</name>
<value>30</value> <!-- hadoop队列最低保证30%资源 -->
</property>
<property>
<name>yarn.scheduler.capacity.root.hadoop.maximum-capacity</name>
<value>50</value> <!-- hadoop队列最多使用50%资源 -->
</property>
fair-scheduler.xml,示例:<property>
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>true</value> <!-- 用户名作为队列名,如user1提交的任务进入user1队列 -->
</property>
<property>
<name>yarn.scheduler.fair.default.queue</name>
<value>default</value> <!-- 默认队列 -->
</property>
生产环境推荐Capacity Scheduler(更适合多团队资源隔离)或Fair Scheduler(更适合公平性需求)。http://namenode-ip:50070)查看HDFS存储状态(如容量、副本数);ResourceManager Web UI(http://resourcemanager-ip:8088)查看集群资源使用情况(如内存、CPU占用)、队列资源分配及任务运行状态。hadoop dfsadmin -report查看HDFS节点状态;yarn node -list查看集群节点列表;yarn top实时查看节点资源占用(如CPU、内存)。$HADOOP_HOME/logs目录下,如hadoop-*-namenode-*.log、yarn-*-resourcemanager-*.log),定位系统级问题(如NameNode启动失败、NodeManager宕机)。yarn.nodemanager.resource.memory-mb)或扩展集群节点(添加新DataNode/NodeManager)。CustomPartitioner替代默认分区器),或在Map端进行预聚合(使用Combiner减少中间数据量)。mapreduce.map.output.compress=true,压缩算法选择snappy,平衡压缩率与CPU开销)或调整HDFS块大小(增大块大小减少网络传输次数)。