美文网首页
解决hive表小文件过多问题

解决hive表小文件过多问题

作者: bigdata张凯翔 | 来源:发表于2020-06-26 01:49 被阅读0次

    问题描述:

    前些时间,运维的同事反应小文件过多问题,需要我们去处理,所以想到是以何种手段去合并现有的小文件。我们知道Hadoop需要在namenode维护文件索引相关的metadata,所以小文件过多意味着消耗更大的内存空间。

    过程

    经过网上的调研发现通过hive表使用orc格式进行存储能够通过concatenate命令对分区进行小文件合并,并且能够节省80%以上的存储空间,真是喜闻乐见!

    本文不再详细介绍orc,text,rc,parquet各种对比,具体可参考Hive基础(五)-Hive的压缩和存储格式,下面只是以举例为主。

    创建一个orc hive 表:

    CREATE EXTERNAL TABLE `app.example_orc`(
      `timestamp` string COMMENT '时间戳',
      `city` string)
    PARTITIONED BY (
      `dt` string)
    STORED AS ORC
    LOCATION
      'hdfs://xxxxxxxx/test'
    TBLPROPERTIES (
      'mart_name'='xxxx',
      'transient_lastDdlTime'='1476148520');
    

    从别的表导数据到此表的20180505分区:
    INSERT INTO TABLE app.example_orc partition(dt="20180505",dt="xxxxx"...) select timestamp, city from app.nielsenid_device2pin_unmapped where dt="20180505"
    使用concatenate命令针对20180505分区进行小文件合并:
    alter table app.example_orc partition (dt="20180505") concatenate;
    不足点:
    使用concatenate命令合并小文件时不能指定合并后的文件数量,虽然可以多次执行该命令,但显然不够优雅。
    当多次使用concatenate后文件数量不在变化,这个跟参数mapreduce.input.fileinputformat.split.minsize=256mb的设置有关,可设定每个文件的最小size;
    只能针对分区使用concatenate命令。

    更多参考:
    Hive优化(十三)-小文件进行合并

    相关文章

      网友评论

          本文标题:解决hive表小文件过多问题

          本文链接:https://www.haomeiwen.com/subject/bwkyfktx.html