如何管理由于向配置单元中插入流数据而创建的小文件?

ej83mcc0  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(366)

我阅读Kafka信息使用简单的Kafka消费者。
将输出存储到hdfs并进行一些过滤。
过滤之后,我将这些数据写入Hive,这会导致小orc文件进入Hive。
有人能告诉我如何处理这种情况吗?

eaf3rand

eaf3rand1#

有一些工具,比如camus和apache gobblin,它们有脚本,可以连续地提取kafka数据,并有“清理/压缩”过程,可以由调度器(比如oozie)运行,以构建更大的时间分区
您还可以通过confluent查看带有hdfs插件的kafka connect框架(使用它不需要运行confluent的kafka安装)。它支持批处理和大文件(我从中得到了每个kafka分区最多4gb的文件),它会自动为您构建配置单元分区
或者可以在流和存储之间使用apachenifi来压缩数据,然后再登陆hadoop
我所知道的唯一其他替代方法是在github上使用基于mapreduce的工具(filecrush就是其中之一),或者编写自己的hive/pig/spark脚本来读取一个位置,对它进行很少的转换(比如计算一个日期分区),然后将它写到其他地方。这将导致较小的块组合成多个,并且每个框架中都有hadoop设置来控制每个文件应该输出多少数据

1l5u6lss

1l5u6lss2#

您可以通过运行

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

要防止配置单元生成过多的orc文件,请尝试

set hive.merge.mapredfiles=true;

相关问题