傻大方


首页 > 潮·科技 > >

SET|0704-5.16.2-如何使用Hive合并小文件



按关键词阅读: SET DataNode Hive 原表 HDFS

问题背景目前集群存于一个非常不健康的状态 , 主要问题是小文件太多 , 单个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为分区
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
共有五个分区
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
每个分区分别四个文件
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
执行流程执行流程总体如下:
1、使用create table name like tb_name创建备用表 , 使得表结构保持一致;
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
2、配置支持merge等参数 , 并使用insert overwrite语句读取原表数据插入到备用表 。
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
3、确认表数据一致后 , 删除原表 , 使用alter语句将备用表的表名修改为原表的表名 。
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
方案描述新建备表 , 表结构与原表保持一致
create table test_part_bak like test_part; SET|0704-5.16.2-如何使用Hive合并小文件文章插图
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
设置如下参数,使支持合并
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;SET|0704-5.16.2-如何使用Hive合并小文件文章插图
使用insert overwrite语句查询原表数据覆盖备表
insert overwrite table test_part_bak partition(date_str) select * from test_part;SET|0704-5.16.2-如何使用Hive合并小文件文章插图
【SET|0704-5.16.2-如何使用Hive合并小文件】备用表数据和原表一致
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
删除原表 , 将备用表表名修改为原表名
alter table test_part_bak rename to test_part;SET|0704-5.16.2-如何使用Hive合并小文件文章插图
合并后表数据没有变化
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
表结构一致
SET|0704-5.16.2-如何使用Hive合并小文件文章插图
从HDFS文件系统可以看出 , 分区数量没有改变 , 每个分区的几个小文件已经合并为一个文件 。
SET|0704-5.16.2-如何使用Hive合并小文件文章插图


    稿源:(未知)

    【傻大方】网址:http://www.shadafang.com/c/111J310962020.html

    标题:SET|0704-5.16.2-如何使用Hive合并小文件


    上一篇:C++核心准则?GSL.ptr:智能指针相关概念

    下一篇:穿越|裸眼3D亮相重庆 商圈上演“轻轨穿越大屏幕”