问题背景

目前集群存于一个非常不健康的状态,主要问题是小文件太多,单个DataNode的block数量阈值是500,000,而现在单个DataNode的block为2,631,218,约为阈值的5倍,现在所有DataNode都处于黄色不健康状态。

小文件问题会直接带来NameNode的压力巨大,从而导致HDFS的稳定性,同时对HDFS日常的数据读写带来性能下降。目前已可以看到集群的NameNode频繁出现检查点告警问题。

通过对集群中目前目录个数,文件大小,文件数量,Hive表数量,Hive数据库数量,Hive分区数量进行了详细的数据采集。发现主要是HDFS目录中的小文件太多,大量1KB的文件,甚至是小于1KB的文件;具体表现为:不论表与分区的数据量大小,当有分区时每个分区具有200个文件,当没有分区时每个表有200个文件,而许多表是小表,所以造成严重的小文件问题。

解决此问题的方法主要为两个方面;一是从源头解决小文件问题,在导数的过程中对作业进行优化,以减少小文件的输出,此方法需要业务方解决;二是合并平台上已有的小文件;本问描写合并平台小文件的方案。

原表情况

通过对集群内的文件数量以及文件大小进行分析,小文件问题基本出现在hive表中;经过近一步分析,发现每个分区存在着200个小文件,可以将这些文件合并减少小文件数量从而缓解小文件问题。

示例表test_part一共20行数据,以字段date_str为分区

共有五个分区

每个分区分别四个文件

执行流程

执行流程总体如下:

1、使用create table name like tb_name创建备用表,使得表结构保持一致;

2、配置支持merge等参数,并使用insert overwrite语句读取原表数据插入到备用表。

3、确认表数据一致后,删除原表,使用alter语句将备用表的表名修改为原表的表名。

方案描述

新建备表,表结构与原表保持一致

create table test_part_bak like test_part; 

设置如下参数,使支持合并

SET hive.merge.mapfiles = true;SET hive.merge.mapredfiles = true;SET hive.merge.size.per.task = 256000000;SET hive.merge.smallfiles.avgsize = 134217728;SET hive.exec.compress.output = true;SET parquet.compression = snappy;SET hive.exec.dynamic.partition.mode = nonstrict;SET hive.exec.dynamic.partition = true;

使用insert overwrite语句查询原表数据覆盖备表

insert overwrite table test_part_bak partition(date_str) select * from test_part;

备用表数据和原表一致

删除原表,将备用表表名修改为原表名

alter table test_part_bak rename to test_part;

合并后表数据没有变化

表结构一致

从HDFS文件系统可以看出,分区数量没有改变,每个分区的几个小文件已经合并为一个文件。

exists hive中如何使用_07045.16.2如何使用Hive合并小文件相关推荐

  1. Hive合并小文件参数总结

    hive merge小文件 一:为什么要合并小文件 当Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件过小,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资 ...

  2. [Hive]Hive合并小文件

    一般每个reduce输出一个文件到HDFS,如果reduce过多,则下阶段处理时就会有很多小文件.如果job只有map,没有reduce,那么可通过map输出时合并小文件. 3.1 map端合并 se ...

  3. 关于hive on spark的distribute by和group by使用以及小文件合并问题

    欢迎关注交流微信公众号:小满锅 问题导言 最近在使用hive时,发现一些任务的因为使用mapreduce的缘故,跑的太慢了,才几十个G的数据就经常跑一个多小时,于是有了切换spark的想法. 但是刚刚 ...

  4. hive与spark合并小文件,将大文件打碎成小文件

    场景一:将小文件合并成大文件. mro_hour_test表每个分区有几千个1m未压缩小文件, 以下语句是将几千个文件在输入时(map阶段)合并成150M一个的文件,插入到mro_hour_test_ ...

  5. spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?

    Spark,Hive,Impala和Presto是基于SQL的引擎,Impala由Cloudera开发和交付.在选择这些数据库来管理数据库时,许多Hadoop用户会感到困惑.Presto是一个开放源代 ...

  6. hive中字段长度函数_技术分享:hive常用内部函数

    原标题:技术分享:hive常用内部函数 hive常用内部函数 hive是一种典型的数据仓库分析工具,常用语编写hql语句进行指标分析.在编写hql的过程中无疑会用到很多的函数,哪本章来编写一些常见的函 ...

  7. Hive insert into小文件问题

    测试数据 CREATE TABLE `test_small` (`dist_id` int COMMENT '区组id',`account` string COMMENT '账号',`gold` in ...

  8. HIVE优化系列(1)-- 自动合并输出的小文件

    小文件的缺陷我们就不说了,直接进入到正题. HIVE自动合并输出的小文件的主要优化手段为: set hive.merge.mapfiles = true:在只有map的作业结束时合并小文件, set ...

  9. 3.2-3.3 Hive中常见的数据压缩

    一.数据压缩 1. 数据压缩数据量小*本地磁盘,IO*减少网络IOHadoop作业通常是IO绑定的; 压缩减少了跨网络传输的数据的大小; 通过简单地启用压缩,可以提高总体作业性能; 要压缩的数据必须支 ...

最新文章

  1. ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。
  2. 沃尔玛开设智慧零售实验室,正面硬刚 Amazon Go
  3. webdriver For selenium
  4. Redhat7开机图形或文字界面
  5. Python学习:字典
  6. GlobalAlloc全局内存的使用
  7. 计算机原理试题b,计算机组成原理试题B答案
  8. mex文件用matlab能打开吗,matlab中mex文件编译运行的问题
  9. git版本回退(回退提交到本地仓库代码)
  10. (摘自CSDN的koy0755)一步一步实现数据库到类的自动化映射(二) 类层次的设计 类的实现...
  11. 美国圣克鲁斯大学计算机科学,加州大学圣克鲁兹分校最热门专业,了解一下?...
  12. DC-DC直流隔离升压高压输出电源模块12v24v48v转50V110V200V250V350V400V500V600V800V1000V微功率
  13. 理清offsetparent()、offsetLeft/offsetTop、offset()、position()
  14. [搬运]一百三十四 - TikTok原评论区搬运(机翻)
  15. Oracle SQL的多表查询 看这一篇文章就够了~
  16. 长尾分布之DECOUPLING REPRESENTATION AND CLASSIFIER FOR LONG-TAILED RECOGNITION
  17. HEVC代码学习19:MV、MVD、MVP概念解析
  18. 《机器人SLAM导航核心技术与实战》第1季:第3章_OpenCV图像处理
  19. 视频中人物识别--tensorflow介绍
  20. windows10忘记密码,修改密码的解决方法

热门文章

  1. 趣谈 JOIN 操作
  2. 强化学习是人工智能的未来?
  3. Entity Framework Core 实现全局查询过滤
  4. 详解 C++ 的隐式类型转换与函数重载!
  5. 你的早鸟票特权仅剩2天!百度、快手、商汤、图森等重磅嘉宾确认出席AI ProCon 2019...
  6. 崛起的 Python,真的影响了 76 万人?
  7. 从模糊搜索 1.0 到 3.0 的算法迭代历程 | 技术头条
  8. 五年烧光 3.5 亿美金,互联网独角兽是如何把自己玩死的?
  9. 突发!5G 标准推迟三个月
  10. 王者荣耀女性机器人面世;深圳中院受理金立破产案;Firefox 64 发布 | 极客头条...