场景一:将小文件合并成大文件。

mro_hour_test表每个分区有几千个1m未压缩小文件,
以下语句是将几千个文件在输入时(map阶段)合并成150M一个的文件,插入到mro_hour_test_cp表中,
每个150M文件将会压缩成每个30M左右的gz文件。

如果 mro_hour_test表每个分区有几千个1m大小的gz文件,在插入到mro_hour_test_cp表时,会被合并成每个150M的gz文件。

set hive.hadoop.supports.splittable.combineinputformat=true;
set mapred.max.split.size=150000000;
set mapred.min.split.size.per.node=150000000;
set mapred.min.split.size.per.rack=150000000;
set mapred.max.split.size.per.node=150000000;
set mapred.max.split.size.per.rack=150000000;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;insert overwrite table mro_hour_test_cp partition(p_hour='${v_day}')
select
manufactorid ,
objdifference ,ltescthermalnoisepower
from mro_hour_test where p_hour='${v_day}' ;load data inpath 'hdfs://hbscjq1/user/nokia_sd/hive_db/mro_hour_test_cp/p_hour=${v_day}' OVERWRITE into table mro_hour_test partition(p_hour='${v_day}');

以上语句将 mro_hour_test 表中小文件合并成大文件,然后插入到 mro_hour_test_cp表中。
之后再将mro_hour_test_cp表中合并后的大文件load回mro_hour_test 表中,替换了小文件。

*** 注:以上语句不能将大文件打碎成小文件。***

场景二:将大文件打碎成小文件

mro_hour_test表每个文件是1G的gz文件,需要用distribute by rand() 强制启动shuffle 使数据通过reduce,
因为reduce设置最大150M。所以数据通过reducer后被分割成150M大小。

##hive版:

set hive.exec.reducers.bytes.per.reducer=150000000;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;insert overwrite table mro_hour_test_cp partition(p_hour='${v_day}')
select
manufactorid ,
....
ltescthermalnoisepower
from mro_hour_test where p_hour='${v_day}' distribute by rand();

#--------------
以下语句可将小文件合并成1G的文件。(如果只是合并文件推荐用 “场景一”hive版的效率好,因为不用启动reduce)
也可将大文件如每个文件10G大小,拆分成1G的文件。

参数 830000000 是830M,但一般情况下spark会把结果文件合并成900多M。
以下语句适合解决:spark设置分区太多,造成很多小文件情况。

##spark版:

spark-sql \
...
--conf "spark.sql.adaptive.enabled=true" \
--conf "spark.sql.adaptive.shuffle.targetPostShuffleInputSize=830000000" \
--hiveconf hive.exec.compress.output=true \
--hiveconf mapred.output.compress=true \
--hiveconf mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
--principal nokia_sd@BCHKDC -e "insert overwrite table TD_NS_MR_LOCATE_H
SELECT
groupid,
....
null issame
FROM TD_NS_MR_LOCATE_SRC_H WHERE ds='日期' distribute by rand();
";

注:如果有计算,有where条件过滤,spark启动了 shuffle,就不需要写 distribute by rand()

场景三:计算结束时合并小文件。

set hive.exec.reducers.bytes.per.reducer=512000000;set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task=512000000;
set hive.merge.smallfiles.avgsize=512000000;insert into result_table
select 复杂计算 from source_table where 条件可过滤大量记录;

在reduce时“条件过滤了大量记录”,因为每个reduce最大接收512M的输入数据,过滤大量记录后,假如每个reduce结果文件只有100M大小。
set hive.exec.reducers.bytes.per.reducer=512000000;

以下语句在reduce后写文件时,判断如果文件小于512M,将会再次启动map将100M的文件合并成512M.
(有的结果文件可能会超过512M,假如reduce后每个文件100M左右,有可以会出现接近600M的文件)
set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task=512000000;
set hive.merge.smallfiles.avgsize=512000000;

hive与spark合并小文件,将大文件打碎成小文件相关推荐

  1. cdr文件太大怎么转成小内存 CDR文件太大打不开怎么办

    使用cdr软件制作图形时,常常会将其制作成矢量图形.虽然矢量图形有着不失真.可任意放大等优点,但常会导致cdr文件过大.那么,cdr文件太大怎么转成小内存,CDR文件太大打不开怎么办?本文将会针对以上 ...

  2. 压缩pdf大小的方法?怎样压缩pdf大小?pdf文档怎么压缩?pdf文件太大怎么压缩?pdf文件太大怎么压缩成小内存?如何降低pdf文件大小?怎么把pdf文件压缩到指定大小?压缩pdf的简单方法

    pdf在线压缩大小?在工作中需要处理大量PDF文件,我们通常要对PDF文件进行压缩处理.那么问题来了,PDF文件该怎么压缩呢?可能很多人都不知道具体的操作方法,今天要分享给大家的正是PDF压缩的方法, ...

  3. 视频文件太大如何压缩变小?

    视频文件太大如何压缩变小?任何文件如果太大就会给使用带来麻烦,尤其是视频文件,一两分钟的视频可能就有几十mb,不仅占用大量的存储空间,发送给别人的时候也更加的费时,这时候就需要将较大的视频压缩变小,提 ...

  4. ppt文件太大怎么压缩变小,4个方法快速学

    ppt文件太大怎么压缩变小?现在都流行线上教学,很多教学的课件都是使用PPT 进行的.但是这些PPT体积往往都非常的大,如果是那种使用时间较长的电脑光是打开这类PPT就非常卡顿了.有的甚至就无法打开这 ...

  5. word文件太大怎么压缩变小?

    word文件太大怎么压缩变小?word文档是各单位使用率很高的一种文件,而长期使用word文档的人,不免遇到word文档体积大,word文档积累过多导致的占内存现象的发生.这时候我们把word文档进行 ...

  6. word文件太大怎么压缩变小

    word文件太大怎么压缩变小?如果word文件包含太多内容,体积就会很大,如果超过100M就不能通过微信发送给别人,这就比较麻烦了.有的朋友会将word文件打成压缩包(如:zip或rar),这样虽然可 ...

  7. 视频文件过大怎么压缩变小?

    昨天上传了一个视频,想保存起来,不过视频文件有点大,占用空间很大,小编查看了进度条很慢,视频文件过大怎么压缩变小?那么视频压缩之后像素会不会变模糊,这个不用担心,这就给大家演示一下. 1.首先打开进入 ...

  8. mp4文件太大怎么压缩变小?

    mp4文件太大怎么压缩变小?mp4是视频文件的格式,平时我们接触到的视频文件大都是这种格式的.大家也都知道视频属于体积较大的文件,有时候一个一分钟的视频大小可能达到上百M,视频文件太大会影响正常的使用 ...

  9. html文件很大,webpack打包之后的文件过大如何解决

    本文主要和大家介绍了webpack打包之后的文件过大的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧,希望能帮助到大家. 以前一直使用 create-react- ...

最新文章

  1. 一份比较详细的 webpack 4.x 手工配置基础开发环境 附源码
  2. Java虚拟机学习(3): 类加载机制
  3. autojs 如何获取控件的desc_Autojs Pro中,常用的几个选择器搜索接口的区别-技术类-雨后春笋...
  4. [20150611]优化sql遇到问题.txt
  5. jwt令牌_JWT令牌的秘密轮换
  6. 时速云入选2018中国企业服务创新成长50强
  7. ZFNet: Visualizing and Understanding Convolutional Networks
  8. 数组常用方法 (es4,es5,es6)
  9. Java中Character类的概述及其详解
  10. 太湖之光超级计算机应用最高奖,世界最快超级计算机“神威·太湖之光”获得100多项应用成果...
  11. python爬取58同城租房信息
  12. jQuery诞生记-原理与机制
  13. 【小白笔记】目标跟踪(Unveiling the Power of Deep Tracking)论文笔记
  14. Android客户端与PC服务器如何实现Socket通信
  15. VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)
  16. Matlab将连续图片处理为视频
  17. 读SQL进阶教程笔记14_SQL编程要点
  18. 对递归的理解以及怎么写递归程序
  19. 信息学奥赛一本通 1198:波兰表达式 | OpenJudge NOI 2.2 1696:波兰表达式
  20. 使用bs4爬取软科大排名并保存在数据库

热门文章

  1. 加拿大计算机系,美加转学等等
  2. VR减肥、味觉减肥全是噱头!从神经和基因层面来看,真正的黑科技减肥方法是这两种!...
  3. Python 中求小于这个数的所有素数
  4. 在进程中运行新代码 execl、execle、execlp、execv、execve和execvp函数
  5. 2022最新隧道人员精确定位系统方案介绍
  6. 变频器由计算机控制,变频器练习题
  7. Nginx网络负载均衡,负载均衡,网络负载,网络均衡
  8. 蓝牙开关与手机蓝牙开关联动
  9. 如何用python画一束花_武汉早樱开了!却没有赏樱人群,那就用python画一束最美的樱花...
  10. QQ资料一键清空工具下载