如何管理由于将流数据插入Hive而创建的小文件?

时间:2018-07-03 11:18:32

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

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

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

有人可以建议我如何处理这种情况吗?

2 个答案:

答案 0 :(得分:2)

您可以通过运行以下命令来减少现有ORC文件的数量

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

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

set hive.merge.mapredfiles=true;

答案 1 :(得分:1)

那里有Camus和Apache Gobblin等工具,这些工具具有用于连续提取Kafka数据的脚本,并具有可由“调度程序”(例如Oozie)运行的“扫描程序/压缩”程序来构建更大的时间分区

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

或者可以在流和存储之间使用Apache Nifi来压缩数据,然后再登陆Hadoop

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