【问题标题】:How to manage small files created due to insertion of stream data into Hive?如何管理由于将流数据插入 Hive 而创建的小文件?
【发布时间】:2018-07-03 23:10:56
【问题描述】:

我正在使用简单的 Kafka 消费者阅读 Kafka 消息。
将输出存储到 HDFS 并进行一些过滤。

过滤后,我将这些数据写入Hive,这会导致小的orc文件进入hive。

有人能告诉我如何处理这种情况吗?

【问题讨论】:

    标签: hadoop hive apache-kafka kafka-consumer-api


    【解决方案1】:

    之后可以通过运行减少现有 ORC 文件的数量

    ALTER TABLE tablename CONCATENATE;
    or ALTER TABLE tablename PARTITION (field=value) CONCATENATE;
    

    为防止 HIVE 生成过多的 ORC 文件,请尝试使用

    set hive.merge.mapredfiles=true;
    

    【讨论】:

      【解决方案2】:

      有一些工具,例如 Camus 和 Apache Gobblin,它们具有用于连续提取 Kafka 数据的脚本,并具有可由 Oozie 等调度程序运行以构建更大时间分区的“清扫/压缩”流程

      您还可以使用 Confluent 的 HDFS 插件查看 Kafka Connect 框架(您无需运行 Confluent 的 Kafka 安装即可使用它)。它支持批处理和大文件(我已经从它的每个 Kafka 分区中获得了多达 4GB 的文件),它会自动为您构建 Hive 分区

      或者 Apache Nifi 可以在您的流和存储之间使用,以在登陆 Hadoop 之前压缩数据

      我知道的唯一其他选择是 Github 上基于 mapreduce 的工具(filecrush 就是其中之一)或编写自己的 Hive/Pig/Spark 脚本来读取位置,对其进行很少的转换(例如计算日期分区),然后在别的地方写出来。这会导致较小的块组合成多个,并且每个框架中都有hadoop设置来控制每个文件应该输出多少数据

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 2018-02-23
        • 1970-01-01
        • 2015-11-12
        • 2020-01-16
        • 1970-01-01
        • 2017-10-04
        • 2013-09-24
        • 2020-03-31
        相关资源
        最近更新 更多