概述
在hiveSql中指定生成的文件个数用到的参数如下:
SET mapred.reduce.tasks=1001;
但是单独加此参数,文件数并不会变成1001,为什么呢?
其实是hive默认在mapReduce结束时合并小文件所致,因此需要加入以下两个参数:
set hive.merge.mapfiles=false;(默认为true)
set hive.merge.mapredfiles=false;(默认为false)
关闭map端和reduce端的输出文件合并功能,即使hive不再合并小文件。
再次运行sql就会发现文件数变成指定的1001个了。
ps:
我们知道文件数目小,容易在文件存储端造成瓶颈,给 HDFS 带来压力,影响处理效率。
因此以上这种方式只适用于个别场景需要手动指定文件数的情况,一般情况都是需要合并Map和Reduce的结果文件来消除小文件过多的影响。
用于设置合并属性的参数有:
- 是否合并Map输出文件:hive.merge.mapfiles=true(默认值为真)
- 是否合并Reduce 端输出文件:hive.merge.mapredfiles=false(默认值为假)
- 合并文件的大小:hive.merge.size.per.task=256*1000*1000(默认值为 256000000)
最后
以上就是生动橘子为你收集整理的自定义指定hive生成的文件数的全部内容,希望文章能够帮你解决自定义指定hive生成的文件数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复