suh*_*has 2 hadoop hive apache-kafka apache-spark spark-streaming
我有一个批处理间隔为 2 分钟(可配置)的火花流作业。
该作业从 Kafka 主题读取并创建数据集并在其上应用架构并将这些记录插入到 Hive 表中。
Spark 作业在 Hive 分区中的每个批处理间隔创建一个文件,如下所示:
dataset.coalesce(1).write().mode(SaveMode.Append).insertInto(targetEntityName);
现在传入的数据不是那么大,如果我将批处理持续时间增加到 10 分钟左右,那么即使我最终也可能只获得 2-3mb 的数据,这远小于块大小。
这是 Spark Streaming 中的预期行为。
我正在寻找有效的方法来进行后期处理以合并所有这些小文件并创建一个大文件。
如果有人以前做过,请分享您的想法。
我鼓励您不要使用 Spark 将数据从 Kafka 流式传输到 HDFS。
Confluent 的Kafka Connect HDFS插件(或 LinkedIn 的 Apache Gobblin)就是为了这个目的而存在的。两者都提供 Hive 集成。
在这个 Github 问题中找到我关于压缩小文件的评论
如果您需要编写 Spark 代码来将 Kafka 数据处理成模式,那么您仍然可以这样做,并以(最好)Avro 格式写入另一个主题,Hive 可以在没有预定义表模式的情况下轻松读取
我个人编写了一个“压缩”过程,它实际上从 Hive 表中抓取了一堆每小时 Avro 数据分区,然后转换为每日 Parquet 分区表以进行分析。到目前为止,它一直工作得很好。
如果您想在记录到达 HDFS 之前对其进行批处理,那么 Kafka Connect 或 Apache Nifi(在链接中提到)可以提供帮助,因为您有足够的内存来存储记录,然后再将它们刷新到 HDFS
| 归档时间: |
|
| 查看次数: |
2663 次 |
| 最近记录: |