我阅读Kafka信息使用简单的Kafka消费者。将输出存储到hdfs并进行一些过滤。过滤之后,我将这些数据写入Hive,这会导致小orc文件进入Hive。有人能告诉我如何处理这种情况吗?
eaf3rand1#
有一些工具,比如camus和apache gobblin,它们有脚本,可以连续地提取kafka数据,并有“清理/压缩”过程,可以由调度器(比如oozie)运行,以构建更大的时间分区您还可以通过confluent查看带有hdfs插件的kafka connect框架(使用它不需要运行confluent的kafka安装)。它支持批处理和大文件(我从中得到了每个kafka分区最多4gb的文件),它会自动为您构建配置单元分区或者可以在流和存储之间使用apachenifi来压缩数据,然后再登陆hadoop我所知道的唯一其他替代方法是在github上使用基于mapreduce的工具(filecrush就是其中之一),或者编写自己的hive/pig/spark脚本来读取一个位置,对它进行很少的转换(比如计算一个日期分区),然后将它写到其他地方。这将导致较小的块组合成多个,并且每个框架中都有hadoop设置来控制每个文件应该输出多少数据
1l5u6lss2#
您可以通过运行
ALTER TABLE tablename CONCATENATE; or ALTER TABLE tablename PARTITION (field=value) CONCATENATE;
要防止配置单元生成过多的orc文件,请尝试
set hive.merge.mapredfiles=true;
2条答案
按热度按时间eaf3rand1#
有一些工具,比如camus和apache gobblin,它们有脚本,可以连续地提取kafka数据,并有“清理/压缩”过程,可以由调度器(比如oozie)运行,以构建更大的时间分区
您还可以通过confluent查看带有hdfs插件的kafka connect框架(使用它不需要运行confluent的kafka安装)。它支持批处理和大文件(我从中得到了每个kafka分区最多4gb的文件),它会自动为您构建配置单元分区
或者可以在流和存储之间使用apachenifi来压缩数据,然后再登陆hadoop
我所知道的唯一其他替代方法是在github上使用基于mapreduce的工具(filecrush就是其中之一),或者编写自己的hive/pig/spark脚本来读取一个位置,对它进行很少的转换(比如计算一个日期分区),然后将它写到其他地方。这将导致较小的块组合成多个,并且每个框架中都有hadoop设置来控制每个文件应该输出多少数据
1l5u6lss2#
您可以通过运行
要防止配置单元生成过多的orc文件,请尝试