Map与Reduce任务个数的控制方法

博客主要介绍了Hadoop中Map任务个数和Reduce任务个数的控制方法,聚焦于信息技术领域大数据开发方面的内容,为相关开发人员提供了关键的技术指导。

1、Map任务个数的控制方法



2、Reduce任务个数的控制方法



在 Hive 中使用 Tez 引擎时,合理设置 mapreduce 个数方法如下: ### 设置 map 个数 - **基于输入数据分片**:maptask 个数 split 逻辑切片的个数有关,在 mapreduce 中,split 逻辑切片和表中文件大小、文件个数、blockSize 等参数有关。Hive 底层读取表默认使用的是 CombineHiveInputFormat,会对小文件进行合并。CombineHiveInputFormat 底层逻辑切片计算过程如下: - 如果文件大小大于 split.maxsize 的 2 倍,则形成一个独立的逻辑切片。 - 如果文件大小大于 split.maxsize,但是小于 split.maxsize 的 2 倍,则拆分成两个平均大小的虚拟存储。 - 如果文件大小小于 split.maxsize,则形成一个虚拟存储。 - 判断虚拟存储的文件大小是否大于 split.maxSize,若大于等于则形成一个逻辑切片;若虚拟存储的文件大小小于 split.maxSize,则和下一个虚拟文件进行合并,直到大于 split.maxsize,共同形成一个切片。例如,可设置 `mapred.max.split.size` 参数来控制每个 map 处理的最大数据量,进而影响 map 数量,设置每个 Map 处理的最大数据为 128MB 的示例代码如下: ```sql SET mapred.max.split.size=134217728; ``` - **结合集群资源**:Tez 内部对 map 数已经有了很多的优化,需要通过 dag 的系统日志来分析,在有限的资源内,结合集群的资源来提高并发,集群资源越多,map 数就可以设置大一点。推荐使用 `tez.grouping.split - count` 结合集群的资源来设置,例如测试 sql 总共分割 895,测试过程中 895 的性能好[^1]。 ### 设置 reduce 个数 - **根据处理数据量设置**:使用 `hive.exec.reducers.bytes.per.reducer` 参数,设置每个 Reduce 处理的数据量,从而间接控制 reduce 数量。例如,设置每个 Reduce 处理的数据为 1GB,可减少 Reduce 数,示例代码如下: ```sql SET hive.exec.reducers.bytes.per.reducer=1073741824; ``` 当参数 `set mapreduce.job.reduces=-1` 时,根据公式 `N = min(参数 2,总输入数据量 / 参数 1)` 进行选择,其中参数 1 为每个 Reduce 处理的数据量,默认是 256MB(`set hive.exec.reducers.bytes.per.reducer=256000000`),参数 2 为每个任务最大的 reduce 数,默认为 1009(`set hive.exec.reducers.max=1009`)。例如,数据量是 512M 时默认启动 512 / 256 = 2 个 reduce 任务[^3]。 - **直接指定数量**:使用 `mapred.reduce.tasks` 参数直接设置 Reduce 任务数,但一般不推荐使用该参数。例如,将 Reduce 任务数设置为 50 的示例代码如下: ```sql SET mapred.reduce.tasks=50; ``` - **考虑集群资源和并行度**:推荐 reduce 数为集群能启动的最大 container 数的 80% 或者小于这个数。同时,可使用 `hive.tez.auto.reducer.parallelism` 参数,启用之后,Tez 会估计数据量大小,设置并行度,在运行时会根据需要调整估计值。示例代码如下: ```sql SET hive.tez.auto.reducer.parallelism = true; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行走的数据智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值