(转载)MapReduce作业配置参数

本文详细介绍了Hadoop MapReduce中的关键配置参数及其含义,包括作业名称、优先级、资源分配、失败重试次数等,并对比了新旧版本中的参数差异。

原文:https://blog.youkuaiyun.com/qiezikuaichuan/article/details/46682049

Note:以下配置可在服务器的mapred-site.xml中配置,作为MapReduce作业的缺省配置参数。也可以在目标作业提交时,通过configuration个性化指定这些参数。

参数名称缺省值说明
mapreduce.job.name
作业名称
mapreduce.job.priorityNORMAL作业优先级
yarn.app.mapreduce.am.resource.mb1536MR ApplicationMaster占用的内存量
yarn.app.mapreduce.am.resource.cpu-vcores1MR ApplicationMaster占用的虚拟CPU个数
mapreduce.am.max-attempts2MR ApplicationMaster最大失败尝试次数
mapreduce.map.memory.mb1024每个Map Task需要的内存量
mapreduce.map.cpu.vcores1每个Map Task需要的虚拟CPU个数
mapreduce.map.maxattempts4Map Task最大失败尝试次数
mapreduce.reduce.memory.mb1024每个Reduce Task需要的内存量
mapreduce.reduce.cpu.vcores1每个Reduce Task需要的虚拟CPU个数
mapreduce.reduce.maxattempts4Reduce Task最大失败尝试次数
mapreduce.map.speculativefalse是否对Map Task启用推测执行机制
mapreduce.reduce.speculativefalse是否对Reduce Task启用推测执行机制
mapreduce.job.queuenamedefault作业提交到的队列
mapreduce.task.io.sort.mb100任务内部排序缓冲区大小
mapreduce.map.sort.spill.percent0.8Map阶段溢写文件的阈值(排序缓冲区大小的百分比)
mapreduce.reduce.shuffle.parallelcopies5Reduce Task启动的并发拷贝数据的线程数目
注意,hadoop 2.x以后的版本重新命名了1.x中的所有配置参数,但兼容1.x版本中的旧参数,只不过会打印一条warning log来提示用户参数的过期。
MapReduce新旧参数对照表可参考Java类org.apache.hadoop.mapreduce.util.ConfigUtil,举例如下:
过期参数名新参数名
mapred.job.namemapreduce.job.name
mapred.job.prioritymapreduce.job.priority
mapred.job.queue.namemapreduce.job.queuename
mapred.map.tasks.speculative.executionmapreduce.map.speculative
mapred.reduce.tasks.speculative.executionmapreduce.reduce.speculative
io.sort.factormapreduce.task.io.sort.factor
io.sort.mbmapreduce.task.io.sort.mb


<think>嗯,用户这次明确要求了解MapReduce作业参数调优的关键指标,看来ta正在搭建或优化Hadoop集群。从引用内容看,ta可能已经注意到JVM内存设置的问题,特别是mapred.child.ulimit和-Xmx的关系。这通常是调优时最容易踩坑的地方。用户上次询问MapReduce原理时,我详细解释了shuffle机制和容错设计,这次应该聚焦参数间的关联性。需要特别注意三个层面:内存管理(尤其是容易溢出的排序缓冲区)、磁盘IO(合并因子和线程数)、网络传输(压缩和并行副本)。不过用户没提具体业务场景,可能需要补充通用性建议。上次提供的原理图中提到环形缓冲区阈值80%,这次要延伸说明为什么是80%——主要是预留空间给溢写时的快速排序。还有那个2倍内存的规则(mapred.child.ulimit>2×-Xmx)必须强调,否则JVM会因内存不足崩溃。用户引用的资料[^1]里这个细节很重要。考虑到用户可能正在操作集群,应该给出具体的参数示例值,比如io.sort.mb设512MB这种经验值。但也要提醒不同硬件配置需要实测,比如128GB内存的节点和64GB的设置肯定不同。磁盘多的节点可以适当增加io.sort.factor。对了,用户没问但可能想知道的是YARN容器内存和MapReduce参数的关系,这个在相关问题里补上吧。还有ta如果用Python的MRJob,参数写法完全不同,需要单开问题说明。</think> MapReduce作业参数调优的关键指标主要围绕**内存管理、磁盘I/O、网络传输**三个核心维度,以下是具体分类及优化原则: --- ### 一、内存资源配置 #### 1. JVM堆内存(基础配置) - **`mapreduce.map.java.opts`** 配置Map任务JVM堆内存上限,需满足: $$ \text{mapreduce.map.java.opts} \geq \text{Map任务峰值内存} \times 1.2 $$ 示例:`-Xmx2G`(堆内存上限2GB)[^1] - **`mapreduce.reduce.java.opts`** Reduce任务的JVM堆内存配置,通常需比Map任务高20%~50% #### 2. 进程内存限制(防OOM) - **`mapred.child.ulimit`** **必须满足**: $$ \text{mapred.child.ulimit} \geq 2 \times \text{mapreduce.[map|reduce].java.opts中-Xmx值} $$ 否则会导致JVM启动失败(如`-Xmx2G`时需设置`ulimit ≥ 4096MB`)[^1] --- ### 二、Shuffle阶段优化 #### 1. 排序缓冲区 | **参数** | **作用** | **调优建议** | |-------------------|--------------------------|----------------------------------| | `mapreduce.task.io.sort.mb` | Map输出排序缓冲区大小 | **占堆内存70%以内**(如堆内存4G则设2.8G) | | `mapreduce.map.sort.spill.percent` | 溢写磁盘阈值 | **0.8**(默认值,避免频繁溢写) | #### 2. 磁盘合并效率 - **`mapreduce.task.io.sort.factor`** 单次合并文件数(默认10),**SSD磁盘可提升至50+** - **`mapreduce.task.io.sort.record.percent`** 缓冲区中元数据占比(默认0.05),**大记录场景需降低** --- ### 三、Reduce阶段优化 #### 1. 数据拉取策略 | **参数** | **优化目标** | **推荐值** | |--------------------------------|------------------|----------------| | `mapreduce.reduce.shuffle.parallelcopies` | Reduce并行拉取数 | **集群规模×0.8**(如50节点设40) | | `mapreduce.reduce.shuffle.input.buffer.percent` | 内存缓冲占比 | **0.7**(堆内存的70%) | #### 2. 归并效率 - **`mapreduce.reduce.merge.inmem.threshold`** 内存合并阈值(默认1000),**大集群可提升至5000+** - **`mapreduce.reduce.input.buffer.percent`** Reduce阶段内存缓存占比(默认0.0),**设0.2可避免二次读盘** --- ### 四、压缩与I/O优化 ```properties # 启用Mapper输出压缩 mapreduce.map.output.compress = true mapreduce.map.output.compress.codec = org.apache.hadoop.io.compress.SnappyCodec # 减少磁盘写入次数 mapreduce.reduce.shuffle.merge.percent = 0.66 # 磁盘合并阈值 ``` --- ### 五、容错与推测执行 | **参数** | **优化场景** | **风险** | |-------------------------------|------------------------|----------------------------| | `mapreduce.map.speculative` | 慢Map任务较多时启用 | 可能造成重复计算 | | `mapreduce.reduce.speculative` | 慢Reduce任务较多时启用 | 需评估资源消耗 | > 🔍 **调优验证工具**: > 通过Hadoop JobTracker的**Counter监控**(如`SPILLED_RECORDS`, `GC_TIME_MILLIS`)量化调优效果[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值