目的:为了整理自己的思路,基本上都是从大佬那里截取的
一:hive的map数量
- 一般情况下,是按照hdfs的数据块大小来决定,默认是128M,也就是被读取的文件整除128M之后的个数,例:128M就是一个map,129M就是两个map
- 按照1.中的思路,可能会出现一种状况,大量的小文件,会导致大量的map,但实际的数据量却没有那么多,造成资源浪费
set mapred.max.split.size=100000000; set mapred.min.split.size.per.node=100000000; set mapred.min.split.size.per.rack=100000000; set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; # 执行前进行小文件合并
- 适当增加map数:当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。
Select data_desc, count(1), count(distinct id), sum(case when …), sum(case when ...), sum(…) from a group by data_desc
这样就可以用多个map任务去完成。 set mapred.reduce.tasks=10; create table a_1 as select * from a distribute by rand(123);
结束