我们可以通过控制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数是受限制的
一、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

本文介绍了如何通过控制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的情况。
最低0.47元/天 解锁文章
9199

被折叠的 条评论
为什么被折叠?



