spark结构化流--kafka

我们的场景是通过spark-streaming读取kafka数据,实时持久化到hdfs上。并按day和hour分区。就像这种格式:

《spark结构化流--kafka》

kafka:0.10.2.0

hdfs:2.7.3

spark:2.2.0

核心代码如下:

《spark结构化流--kafka》

repartition是由于生成文件数量过多,合理合并分区能减少。如果用coalesce会导致任务不能并行(如果是1, 就那就只有一个node运行)。

checkpoint能保证任务挂掉,在kafka数据没有过期前重启能继续正确的运行。但是超过时间会报错Kafka OffSetOutOfRange而导致失败。如果此时你删掉checkpoint dir,任务能正常执行但是会发现它并不会去读取kafka分区的数据。这是因为还有一个地方记录着你的流式处理元信息。

《spark结构化流--kafka》

它记录着你流式批次信息,如果不删除,spark-streaming会认为你一直在提交过期的job,导致数据不被处理。

当然,这只是结构化流一点使用心得。更多的文档信息在https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html

    原文作者:Gilegamesh
    原文地址: https://www.jianshu.com/p/4796deb2d8ae
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞