hive设置map和reduce数量,可参考

hive的map和reduce数量如何确定
map的数量

  1. 确定map的数量:主要决定因素有input文件的总个数,input中文件的大小,集群设置的 文件块大小(默认128M,可在hive shell中通过set dfs.block.size查看)三种
    举例:文件不足128M则当做一个块,大于128M则拆分 input目录下有七个文件,大小均为64M,则共7个map
    input目录下有10M,10M,129M三个文件,则共4个map,其中129M拆分为128M+1M两个文件
    input目录下有10M,10M,257M三个文件,则共5个map,其中129M拆分为128M+128M+1M三个文件

  2. map数量不是越多越好:如果有过多的小文件(大小远不够128M),则每个小文件也会当做一个块,甚至计算时间没有map任务的启动和初始化时间,则会造成资源的浪费,
    解决方案:合并小文件,减少map数,可通过设置如下参数解决

    1.map输入时合并小文件

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;  #执行Map前进行小文件合并
set mapred.max.split.size=128000000;  #每个Map最大输入大小,单位为KB
set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小,单位为KB
set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小,单位为KB
2.map输出时合并小文件
set hive.merge.mapfiles = true #在Map-only的任务结束时合并小文件
set hive.merge.mapredfiles = true #在Map-Reduce的任务结束时合并小文件
set hive.merge.sparkfiles = true #在hive on spark任务后开启合并小文件
set hive.merge.size.per.task = 256*1000*1000 #合并文件的大小
set hive.merge.smallfiles.avgsize=16000000 #当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge
  1. 保证map处理的所有文件块都接近128M,效率不一定最高
    1.如果文件中只有一两个字段,则有过多条数据,此时在一个map中会执行的很慢。当任 务逻辑复杂,map执行非常慢的时候,可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率
    2.解决方案为:计算每个文件块合适大小maxSize,然后设置set mapreduce.input.fileinputformat.split.maxsize=maxSize;来将文件切分为,文件大小为maxSize的小文件

  2. 同时存在大文件切分和小文件合并是必要的吗?答:在实际处理数据的时候存在多种多样的情况,根据实际情况控制map数量需要遵从两个原则:大量数据处理需要合适的map数量/单个map任务处理需要合适的数据量。只有把握好这两点才能最大效率的处理数据(类似生活中,一件工作安排给多个人会快一些,但是安排过多的人并不会让任务更快的完成,相反给这么多人安排工作是一件非常费力的事情)。

reduce的数量

1.确定reduce的数量:reduce个数的设定极大影响任务的执行效率,不指定reduce个数的 情况下,hive会基于以下两个参数计算reduce的个数(在hadoop中默认reduce只有一个的
情况下,否则会对每个reduce都进行这种计算)
hive.exec.reducers.bytes.per.reducer,如果reduce数据大小不大于这个值,则只有1个reduce,否则会有:数据量/hive.exec.reducers.bytes.per.reducer个reduce
hive.exec.reducers.max,总的reduce数量不会超过这个值

2.调整reduce数量的方法 设置hive.exec.reducers.bytes.per.reducer的大小 在hadoop的mapred-default.xml中设置reduce的个数或通过hive shell设置set
mapreduce.job.reduces=reduceNum;来硬性规定reduce的个数

3.reduce个数不是越多越好
过多的启动和初始化reduce也会消耗时间和资源
有多少个reduce就会有多少个输出文件,如果生成了很多小文件,如果这些小文件作为下一个任务的输入,则也会出现效率问题
4.只有一个reduce的情况,有时候会出现不过多大数据量和怎么硬性规定都只有一个reduce,共有三种情况会导致这种结果:这三种情况都是全局的,不得不使用一个reduce来完成
没有使用groupby这类汇总
使用了order by
有笛卡尔积
5.在设置reduce个数的时候也需要考虑这两个原则:使大数据量利用合适的reduce数;使单个reduce任务处理合适的数据量;
————————————————
版权声明:本文为CSDN博主「小~蜉蝣」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/may_fly/article/details/102888436

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值