hive优化策略之控制map数和reduce数

本文介绍了如何通过控制Hive中的map和reduce任务数量来优化程序性能。内容涉及map数量的控制,包括理解map任务与输入文件的关系、避免小文件过多以及如何合并小文件减少map数。同时,文章也探讨了适当增加map数的方法,以提高任务执行效率。对于reduce数量,文章讨论了Hive默认的reduce任务计算方式,以及如何调整`hive.exec.reducers.bytes.per.reducer`参数和直接设置`mapred.reduce.tasks`来控制reduce数量。最后,文中提醒了在特定场景下,如无`group by`、使用`order by`或笛卡尔积时,任务只能使用一个reduce的情况。
摘要由CSDN通过智能技术生成
我们可以通过控制map和reduce的数量来平衡资源达到优化程序的目的。


一、map数量


map的数量与你输入的文件个数和大小有关,你可以通过set dfs.block.size;来查看集群设置的文件块大小,该参数不能自定义修改。


hive> set dfs.block.size;
dfs.block.size=134217728


例如你输入一个文件file1,大小是450M,那么hadoop会把它划分成4个块,3个128M和1个66M的文件块,从而map的数量就是4。
例如你输入四个文件file1、file2、file3、file4,大小分别是10M、20M、100M、140M,那么hadoop就会将其分成5个文件块,分别是10、20、100、128、2,从而map的数量就是5。


注意:map也不是说越多越好,如果输入的文件都是小文件,每个文件都会被当做一个文件块来进行处理,每一个文件就是一个map,因为map任务启动和初始化的时候会大于逻辑处理的时间,那么会造成资源的浪费,而且可同时执行的map数是受限制的

一个tasktracker能够同时运行最多多少个map和reduce任务
一个tasktracker能够同时运行最多多少个map任务:由mapred.tasktracker.map.tasks.maximum属性控制,默认值是2个任务。相应的,一个tasktracker能够同时运行的最多reduce任务数由mapred.tasktracker.reduce.task.maximum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值