YARN是Hadoop的资源管理核心,其调度器决定了任务资源的分配逻辑。Hadoop自带三种主流调度器,需根据集群场景选择:
yarn.scheduler.capacity.root.default.capacity)为不同团队/项目分配固定资源池,保证资源隔离和公平性。yarn.scheduler.fair.allocation.file配置公平策略),适合小任务快速响应与大任务稳定运行的混合场景。根据作业特性调整调度器参数,提升资源利用率:
yarn.scheduler.capacity.root.<queue>.minimum-user-limit-percent(容量调度器)或yarn.scheduler.fair.user-as-default-queue(公平调度器)为关键作业预留资源,避免低优先级任务占用核心资源。yarn.scheduler.capacity.root.<queue>.priority(容量调度器)或mapreduce.job.priority(作业级别),确保重要作业(如实时分析)优先执行。mapreduce.map.memory.mb(Map任务内存)、mapreduce.reduce.memory.mb(Reduce任务内存)及yarn.scheduler.maximum-allocation-mb(NodeManager最大分配内存),避免资源浪费或溢出。数据本地化(Task在数据所在节点执行)能大幅减少网络传输开销,提升任务效率:
dfs.blocksize(如128MB或256MB),大文件采用大块减少寻址时间,小文件采用小块避免资源浪费。dfs.replication(如3副本),平衡存储成本与读取性能(副本越多,读取时本地化概率越高)。dfs.network.script配置机架感知,让Task优先调度到数据所在机架的节点,减少跨机架网络传输。通过调整MapReduce参数,减少任务执行时间和资源消耗:
mapreduce.job.combine.class设置org.apache.hadoop.mapreduce.Reduce),减少Reduce阶段的数据量。mapreduce.shuffle.file.buffer(Shuffle缓冲区大小,默认128KB,可增至256MB)、mapreduce.reduce.shuffle.merge.percent(Shuffle合并阈值),提升Shuffle效率。mapreduce.speculative.execution(默认true),对慢任务启动备份任务,避免因节点故障或资源不足导致的长尾任务。优化Linux内核参数,提升Hadoop集群的I/O和网络性能:
swapoff -a关闭Swap,避免内存不足时任务频繁换页(可将vm.swappiness设置为0,彻底禁用Swap)。/etc/security/limits.conf,增加nofile(文件描述符)和nproc(进程数)限制(如* soft nofile 65536、* hard nofile 65536),避免大量文件读写或任务并发导致的进程崩溃。noop(无调度)或deadline(低延迟),HDD使用cfq(完全公平队列),提升磁盘读写效率。blockdev --setra 1024 /dev/sdX(如/dev/sda)增大磁盘预读取缓冲区(默认128KB,可增至1MB),减少磁盘寻道时间。通过监控工具实时跟踪集群状态,动态调整调度策略:
yarn logs -applicationId <appId>),定位任务失败原因(如资源不足、数据倾斜),针对性调整调度参数。yarn.scheduler.capacity.root.<queue>.maximum-capacity),适应业务增长需求。mapreduce.speculative.execution.slowTaskThreshold(慢任务阈值,默认10分钟),避免过度启动备份任务(增加集群负载)。