如何合并小文件,减少map数?
假设一个SQL任务:
Select count(1) from popt_tbaccountcopy_mes where pt = ‘2012-07-04’;
该任务的inputdir /group/p_sdo_data/p_sdo_data_etl/pt/popt_tbaccountcopy_mes/pt=2012-07-04
共有194个文件,其中很多是远远小于128m的小文件,总大小9G,正常执行会用194个map任务。
Map总共消耗的计算资源: SLOTS_MILLIS_MAPS= 623,020

我通过以下方法来在map执行前合并小文件,减少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;
再执行上面的语句,用了74个map任务,map消耗的计算资源:SLOTS_MILLIS_MAPS= 333,500
对于这个简单SQL任务,执行时间上可能差不多,但节省了一半的计算资源。
大概解释一下,100000000表示100M, set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;这个参数表示执行前进行小文件合并,
前面三个参数确定合并文件块的大小,大于文件块大小128m的,按照128m来分隔,小于128m,大于100m的,按照100m来分隔,把那些小于100m的(包括小文件和分隔大文件剩下的),
进行合并,最终生成了74个块。

如何适当的增加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
如果表a只有一个文件,大小为120M,但包含几千万的记录,如果用1个map去完成这个任务,肯定是比较耗时的,这种情况下,我们要考虑将这一个文件合理的拆分成多个,
这样就可以用多个map任务去完成。
set mapred.reduce.tasks=10;
create table a_1 as 
select * from a 
distribute by rand(123);

这样会将a表的记录,随机的分散到包含10个文件的a_1表中,再用a_1代替上面sql中的a表,则会用10个map任务去完成。
每个map任务处理大于12M(几百万记录)的数据,效率肯定会好很多。

看上去,貌似这两种有些矛盾,一个是要合并小文件,一个是要把大文件拆成小文件,这点正是重点需要关注的地方,
根据实际情况,控制map数量需要遵循两个原则:使大数据量利用合适的map数;使单个map任务处理合适的数据量;

转载于:https://blog.51cto.com/yntmdr/1740587

hive优化--增加减少map数相关推荐

  1. hive优化之------控制hive任务中的map数和reduce数

    一.    控制hive任务中的map数: 1.    通常情况下,作业会通过input的目录产生一个或者多个map任务. 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的 ...

  2. 深入浅出学Hive:Hive优化

    目录: 初始Hive Hive安装与配置 Hive内建操作符与函数开发 Hive JDBC Hive参数 Hive高级编程 Hive QL Hive Shell基本操作 Hive优化 Hive体系结构 ...

  3. 数据分析利器之hive优化十大原则

    转载:http://www.cnblogs.com/sandbank/p/6408762.html hive之于数据民工,就如同锄头之于农民伯伯.hive用的好,才能从地里(数据库)里挖出更多的数据来 ...

  4. 大数据开发之Hive优化篇8-Hive Job优化

    备注: Hive 版本 2.1.1 文章目录 Hive job优化概述 一.并行执行 二.本地执行 三.合并输入小文件 四.合并输出小文件 五.控制Map/Reduce数 5.1 控制Hive job ...

  5. 一篇文章让你通透Hive优化

    Hive优化 一.hive参数优化 1.map数优化 2.reduce数优化 3.Fetch抓取(Hive可以避免进行MapReduce) 4 .模式选择  1)本地模式  2)并行模式  3)严格模 ...

  6. Hive优化的十大方法

    Hive用的好,才能从数据中挖掘出更多的信息来.用过hive的朋友,我想或多或少都有类似的经历:一天下来,没跑几次hive,就到下班时间了.Hive在极大数据或者数据不平衡等情况下,表现往往一般,因此 ...

  7. Hive优化方法汇总

    Hive优化方法: 1.Fetch抓取 2.本地模式 3.表的优化 (1)小表大表Join(MapJoin) (2)大表Join大表 (3)Group By (4)Count(Distinct)去重统 ...

  8. Hive优化的基本思路

    一.开头 好好理解Map-Reduce过程,多看看执行计划[explain 查询语句],就会更帮帮地理解咯 二.Hive-SQL语句转化成MapReduce 1)Join的实现原理 select u. ...

  9. Hive优化【提高效率,减少资源浪费等】

    一.谨慎使用API 大数据场景下,必然是有大量的数据,因此大数据场景下并不怕数据量大,不行可多开几个节点,用以存储.但是大数据场景下,害怕的是数据倾斜,如果使用不当API,很容易造成数据倾斜问题. 容 ...

最新文章

  1. saltstack中salt-key收集的主机名与实际主机名不一致
  2. Minimum supported Gradle version is 6.1.1
  3. 基于python的界面自动化测试-基于Python语言的自动化测试实战第二章(上)
  4. Python单例设计模式
  5. 方立勋_30天掌握JavaWeb_JDBC、存储过程、事务(二)
  6. 【渝粤教育】电大中专药物分析技术基础作业 题库
  7. python yield原理_从python的yield说起
  8. 优秀的博客地址-冰冻三尺非一日之寒
  9. 计算机一级标题底纹,2017年计算机一级考试MSOffice考点解析:幻灯片背景的设置...
  10. win 10 设置静态ip子网前缀长度的计算方法
  11. 未来的科技之光生物计算机,寻觅科技之光,点亮美好未来
  12. 如何在网站中添加音乐
  13. stl文件用proe怎么打开_3dMax怎么导入proe的文件渲染?3dmax导入stl文件过程
  14. \int_0^{+\infty} \frac{\sin x}{x}\mathop{}\!\mathrm{d}{x}
  15. HG30-IIB型数字多功能校准仪
  16. 只会Python可造不出iPhone
  17. DSP的GEL文件详解
  18. text-davinci-002与 text-davinci-003 有什么不同?
  19. webgl——给场景添加光
  20. 淘宝直播基地是什么?

热门文章

  1. OSPF外部实验详解
  2. Promise 的四种常用方法。
  3. Objective-C 常用代码
  4. flex mx:TabNavigator进行选项卡切换,需要进行交互时。发生Error #1009错误
  5. UTF8下的中文截取
  6. 分布式文件系统HDFS 学习指南
  7. 大数据分析平台搭建方式有哪些
  8. 搭建大数据平台的步骤有哪些
  9. BI与大数据之间的差距有哪些
  10. 数据协作如何解决大数据的大问题