(转载)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


### 解决方案概述 当 Hive 执行复杂的多表查询时,可能会因为 YARN 的资源分配不足而导致性能下降甚至卡顿。以下是针对此问题的具体分析和解决方案。 --- #### 1. **调整 YARN 资源管理参数** YARN 中的 `yarn.nodemanager.resource.memory-mb` 参数定义了单个节点可用的最大内存总量。如果该值设置过低,可能导致 MapReduce 或 Tez 作业无法获得足够的内存来运行任务[^1]。 建议将此参数增加到适合集群规模的数值,例如: ```bash export YARN_NODEMANAGER_RESOURCE_MEMORY_MB=32768 # 设置为 32GB ``` 通过修改 `yarn-site.xml` 文件中的配置项实现永久生效: ```xml <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>32768</value> </property> ``` --- #### 2. **优化 MapReduce 内存分配** 对于 Map 和 Reduce 任务的内存需求,可以通过以下参数进行微调: - **Map 任务内存**:`mapreduce.map.memory.mb` 定义每个 Map 任务可使用的最大内存量。 - **Reduce 任务内存**:`mapreduce.reduce.memory.mb` 定义每个 Reduce 任务可使用的最大内存量。 默认情况下,这些值可能不足以支持大规模数据处理。可以尝试将其增大至合理范围,例如: ```bash export MAPREDUCE_MAP_MEMORY_MB=4096 # 每个 Map 任务使用 4GB export MAPREDUCE_REDUCE_MEMORY_MB=8192 # 每个 Reduce 任务使用 8GB ``` 对应的 XML 配置如下: ```xml <property> <name>mapreduce.map.memory.mb</name> <value>4096</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>8192</value> </property> ``` 此外,还需要注意 JVM 堆大小的相关参数,如 `mapreduce.{map|reduce}.java.opts`,它们决定了实际分配给 Java 进程的堆空间比例[^2]。 --- #### 3. **Hive 查询引擎的选择与优化** Hive 支持两种主要的执行引擎:MapReduce 和 Tez。Tez 是一种更高效的分布式计算框架,在处理复杂查询时通常表现更好。启用 Tez 可以显著减少中间文件写入次数并提升整体性能。 要切换到 Tez 引擎,请在 Hive CLI 或 Beeline 中执行以下命令: ```sql SET hive.execution.engine=tez; ``` 同时,确保安装并正确配置了 Apache Tez 组件及其依赖库。 --- #### 4. **动态分区裁剪与广播连接** 为了进一步提高效率,可以在 SQL 层面应用一些最佳实践: - 启用动态分区裁剪 (`hive.optimize.dynamic.partition.pruning`) 来减少不必要的 I/O 开销。 - 对于小表参与的大规模 Join 操作,考虑使用广播连接(Broadcast Join)。这可通过设置 `hive.auto.convert.join=true` 实现自动转换。 示例配置: ```sql SET hive.optimize.dynamic.partition.pruning=true; SET hive.auto.convert.join=true; ``` --- #### 5. **监控与日志排查** 最后,利用工具如 Ambari、Cloudera Manager 或 YARN ResourceManager Web UI 监控作业运行状态。重点关注以下几个方面: - 是否存在频繁的任务失败或重试现象? - 数据倾斜是否成为瓶颈? 必要时查看 Hadoop 日志定位具体错误原因,并据此调整资源配置。 --- ### 示例代码片段 以下是一个完整的 Hive Session 初始化脚本,用于优化多表复杂查询场景下的性能: ```bash #!/bin/bash # 设置环境变量 export HADOOP_CONF_DIR=/etc/hadoop/conf export TEZ_HOME=/usr/lib/tez # 修改 YARN 和 MapReduce 参数 hdfs dfsadmin -setSpaceQuota unlimited / yarn application -list | grep 'RUNNING' || echo "No running applications" # 提交 Hive 查询 beeline -u jdbc:hive2://localhost:10000 <<EOF SET hive.execution.engine=tez; SET tez.am.resource.memory.mb=8192; SET mapreduce.map.memory.mb=4096; SET mapreduce.reduce.memory.mb=8192; -- 复杂查询语句 SELECT t1.colA, COUNT(t2.colB) FROM table1 t1 JOIN table2 t2 ON (t1.id = t2.fk_id) GROUP BY t1.colA; EOF ``` --- ### 总结 通过对 YARN 资源管理和 Hive 查询引擎的综合优化,能够有效缓解由于内存不足引发的卡顿问题。务必结合实际情况测试不同参数组合的效果,找到最适合当前工作负载的最佳配置。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值