我是靠谱客的博主 生动橘子,最近开发中收集的这篇文章主要介绍自定义指定hive生成的文件数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在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生成的文件数所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部