【发布时间】:2018-07-03 23:10:56
【问题描述】:
我正在使用简单的 Kafka 消费者阅读 Kafka 消息。
将输出存储到 HDFS 并进行一些过滤。
过滤后,我将这些数据写入Hive,这会导致小的orc文件进入hive。
有人能告诉我如何处理这种情况吗?
【问题讨论】:
标签: hadoop hive apache-kafka kafka-consumer-api
我正在使用简单的 Kafka 消费者阅读 Kafka 消息。
将输出存储到 HDFS 并进行一些过滤。
过滤后,我将这些数据写入Hive,这会导致小的orc文件进入hive。
有人能告诉我如何处理这种情况吗?
【问题讨论】:
标签: hadoop hive apache-kafka kafka-consumer-api
之后可以通过运行减少现有 ORC 文件的数量
ALTER TABLE tablename CONCATENATE;
or ALTER TABLE tablename PARTITION (field=value) CONCATENATE;
为防止 HIVE 生成过多的 ORC 文件,请尝试使用
set hive.merge.mapredfiles=true;
【讨论】:
有一些工具,例如 Camus 和 Apache Gobblin,它们具有用于连续提取 Kafka 数据的脚本,并具有可由 Oozie 等调度程序运行以构建更大时间分区的“清扫/压缩”流程
您还可以使用 Confluent 的 HDFS 插件查看 Kafka Connect 框架(您无需运行 Confluent 的 Kafka 安装即可使用它)。它支持批处理和大文件(我已经从它的每个 Kafka 分区中获得了多达 4GB 的文件),它会自动为您构建 Hive 分区
或者 Apache Nifi 可以在您的流和存储之间使用,以在登陆 Hadoop 之前压缩数据
我知道的唯一其他选择是 Github 上基于 mapreduce 的工具(filecrush 就是其中之一)或编写自己的 Hive/Pig/Spark 脚本来读取位置,对其进行很少的转换(例如计算日期分区),然后在别的地方写出来。这会导致较小的块组合成多个,并且每个框架中都有hadoop设置来控制每个文件应该输出多少数据
【讨论】: