我是靠谱客的博主 孝顺白猫,最近开发中收集的这篇文章主要介绍Hive小文件的解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第一种:从数据产生的途径上进行解决。
1)尽量用sequencefile (SequenceFile文件是Hadoop用来存储二进制形式的key-value对而设计的一种平面文件(Flat File)。),减少使用textfile (文本文件),从一定程度上能减少小文件的产生。
2)可以减少reduce的个数,
3)少用动态表,多用distribute by 分区

第二种:对于已经存在的小文件进行解决方案。

1)可以用hadoop achieve 归档命令,对文件进行归档。
2)重建表,重建表的时候来设置减少reduce的数量。
3)设置map/reduce 的参数

设置map输入合并小文件的相关参数:

每个map最大输入大小(这个值决定 了合并后文件的数量)
set mapred.max.split.size = 256000000;
一个节点上的split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)
set mapred.min.split.size.per.node = 100000000;
一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并)
set mapred.min.split.size.per.rack = 100000000;
执行Map前进行小文件合并
set hive.input.format = org.apache.hadoop.hive.ql.io.CombinHiveInput;

设置map输出和reduce输出进行合并的相关参数:

设置map端输出进行合并,默认为true
set hive.merge.mapfiles = true;
设置reduce端输出进行合并,默认为false
set hive.merge.mapredfiles = true;
设置合并文件的大小
set hive.merge.size.per.task = 256*1000*1000;
当输出文件的平均数小于该值师,启动一个独立的Mapreduce任务进行文件merge.
set hive.merge.smailfiles.avgsize = 16000000;

最后

以上就是孝顺白猫为你收集整理的Hive小文件的解决方案的全部内容,希望文章能够帮你解决Hive小文件的解决方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部