码迷,mamicode.com
首页 > 其他好文 > 详细

Hive之小文件问题及其解决方案

时间:2018-07-31 22:11:28      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:交换机   合并   建表   方案   使用   解决   交换   影响   files   

 

小文件如何产生

1.动态分区插入数据,产生大量小文件,导致map数剧增

2.Reduce数越多,小文件越多

3.数据直接导入小文件

小文件的影响

从hive的角度看,小文件会开很多map,一个map开一个jvm去执行,所以这些任务的初始化,启动,执行浪费大量资源,严重影响集群性能

在HDFS中,每个小文件对象越占150byte,如果小文件过多会占用大量内存。这样namenode内存容量严重制约了集群的扩展。

解决思路

  1. 使用sequence file作为表的存储格式,不要用TextFile
  2. 减少Reducer数量,可以用参数控制
  3. 少用动态分区,使用时记得要distribute by分区

解决方案

手动解决1:hadoop archive命令把小文件归档

手动解决2:重建表,将数据转移,建表时减少reducer数量,设置reducer

自动解决方案:脚本中加入设置参数,

设置

hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

然后开启map与reduce自动合并小文件

hive.merge.mapfiles=true 是否合并map输出文件,默认为True

hive.merge.mapredfiles=false 是否合并Reduce输出文件,默认为False

设置split size减少map数,包括每个及诶单的每个交换机的至少大小

Set mapred.max.split.size=100000000;

Set mapred.max.split.size.per.node=100000000;

Set mapred.max.split.size.per.rack=100000000;

Set hive.input.format = org. apache. hadoop. hive. ql. io. CombineHiveInputFormat;

Hive之小文件问题及其解决方案

标签:交换机   合并   建表   方案   使用   解决   交换   影响   files   

原文地址:https://www.cnblogs.com/BetterThanEver-WWCH/p/9397798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!