方法一

hive方法处理
set hive.merge.mapfiles=true; -- map only job 结束是合并小文件
set hive.merge.mapredfiles=true; -- 合并reduce输出的小文件
set hive.merge.smallfiles.avgsize=256000000; -- 当输出文件平均大小小于该值,启动新job合并文件
set hive.merge.size.per.task=128000000; -- 合并之后的每个文件大小128M
set hive.exec.dynamic.partition.mode=nonstrict; -- 动态分区
set mapreduce.job.queuename=data_rd; --设置队列
set hive.exec.max.dynamic.partitions=10000; -- 设置分区数,默认100
set hive.exec.max.dynamic.partitions.pernode=10000; -- 设置分区数, 默认100
set parquet.memory.min.chunk.size=100000; -- 暂时还不知道这是设置了啥
insert overwrite table tableName partition(columnName) select * from tableName;

方法二: 针对按分区插入数据的时候产生大量的小文件的问题, 可以使用DISTRIBUTE BY rand() 将数据随机分配给Reduce,这样可以使得每个Reduce处理的数据大体一致.
# 设置每个reducer处理的大小为5个G
set hive.exec.reducers.bytes.per.reducer=5120000000;

# 使用distribute by rand()将数据随机分配给reduce, 避免出现有的文件特别大, 有的文件特别小
insert overwrite table test partition(dt)
select * from iteblog_tmp
DISTRIBUTE BY rand();

方法三: 使用Sequencefile作为表存储格式,不要用textfile,在一定程度上可以减少小文件
方法四: 使用hadoop的archive归档
set mapreduce.job.queuename=data_rd;
#用来控制归档是否可用
set hive.archive.enabled=true;
#通知Hive在创建归档时是否可以设置父目录
set hive.archive.har.parentdir.settable=true;
#控制需要归档文件的大小
set har.partfile.size=1099511627776;

#使用以下命令进行归档
ALTER TABLE srcpart ARCHIVE PARTITION(ds='2008-04-08', hr='12');

#对已归档的分区恢复为原文件
ALTER TABLE srcpart UNARCHIVE PARTITION(ds='2008-04-08', hr='12');

#::注意,归档的分区不能够INSERT OVERWRITE,必须先unarchive

补充: hadoop自带的三种小文件处理方案 – Hadoop Archive,Sequence file和CombineFileInputFormat.
Hadoop Archive

Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。

Sequence file

sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。

CombineFileInputFormat

它是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置
————————————————
原文链接:https://blog.csdn.net/Q1059081877Q/article/details/103627938

hive小文件处理方法相关推荐

  1. hive小文件过多问题解决方法

    小文件产生原因 hive 中的小文件肯定是向 hive 表中导入数据时产生,所以先看下向 hive 中导入数据的几种方式 直接向表中插入数据 insert into table A values (1 ...

  2. 解决hive小文件过多问题

    hive 中的小文件肯定是向 hive 表中导入数据时产生,所以先看下向 hive 中导入数据的几种方式 1. 直接向表中插入数据 insert into table A values (1,'zha ...

  3. 有效解决hive小文件过多问题

    小文件产生原因 hive 中的小文件肯定是向 hive 表中导入数据时产生,所以先看下向 hive 中导入数据的几种方式 直接向表中插入数据 insert into table A values (1 ...

  4. Flink大数据实时计算系列-Flink写出多个parquet小文件处理方法、Presto的介绍与使用场景

    Flink大数据实时计算系列-Flink写出多个parquet小文件处理方法.Presto的介绍与使用场景 Presto的安装与使用 目录 Flink写出多个parquet小文件处理方法 Presto ...

  5. Hive小文件问题:如何产生、造成影响、解放办法

    一.小文件是如何产生的 1.动态分区插入数据,产生大量的小文件,从而导致map数量剧增. 2.reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的). 3.数据源本身就包含大量的小 ...

  6. hive 小文件过多解决方案

    目录 一.小文件产生原因 二.小文件过多产生的影响 三.怎么解决小文件过多 1. 使用 hive 自带的 concatenate 命令,自动合并小文件 2. 调整参数减少Map数量 3. 减少Redu ...

  7. hive小文件过多问题解决

    起因 数据中台当前有一张流水类表,存在3200个分区,230w个数据文件,150亿条数据,导致该表查询起来及其麻烦,更令人糟心的是,业务人员不懂查询方式,经常有人使用select *的方式查询该表,导 ...

  8. 10分钟掌握Hive小文件过多如何解决?

    写在前面 在做数据仓库的时候,使用动态分区会产生许多的小文件,给计算资源造成较大的影响,所以本文针对小文件如何规避计算资源浪费作了一些设计 为什么要处理小文件: 1.从Hive在进行mapreduce ...

  9. HDFS小文件优化方法

    HDFS小文件弊端 HDFS上每个文件都要在NameNode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件,一方面会大量占用NameNode的内存空 ...

最新文章

  1. 实时音视频的超级风口,开发者的机会在哪里?
  2. ROS学习(二):在ubuntu 16.04安装ROS Kinetic
  3. python语法笔记(六)
  4. CIKM 2021 | Deep Retrieval:字节跳动深度召回模型论文精读
  5. JS 停留几秒后返回上一页
  6. matlab系统的初始条件,指定总线信号的初始条件
  7. android开源2016_Google 2016年开源版本浏览
  8. strassen算法java_使用java写的矩阵乘法实例(Strassen算法)_Java_软件编程
  9. 全新定义!免费开源ERP平台如何玩转工业互联网
  10. Java虚拟机面试总结
  11. 省市区县街道地图json
  12. 根据error_log发现图片木马,被上传到图片文件夹
  13. 人工智能改变我们生活的7种方式
  14. 电商十四、pinyougou02.sql的内容⑤
  15. 使用idea中JD-Intellij插件反编译
  16. 详细Gitee(码云)使用方法
  17. 东方日升再夺印度第一光伏供应商桂冠
  18. linux版uTorrent安装手记
  19. java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gaobo.e5community/com.g
  20. 深度学习笔记----计算机视觉的任务及对应的网络模型

热门文章

  1. orangepi5使用sata ssd启动系统
  2. 有没有谁用过网络尖兵?
  3. c#中文字符串与byte数组互相转化
  4. 基于python开发pepper机器人的人脸识别--使用facenet
  5. 手机联系人姓名或号码过长无法导入到SIM卡
  6. 河北计算机一级考试试题,河北计算机一级试题及答案.doc
  7. 5G/4G边缘计算网关 智能边缘网关TG463
  8. Elasticsearch搜索操作
  9. 【毕业设计 大作业高分项目】html+php实现个人博客网站
  10. mysql可以安多个吗_全屋插座安多高?5个数字全搞定