代码之家  ›  专栏  ›  技术社区  ›  D. Müller

Spark Streaming:长时间运行后,许多排队的批处理没有问题

  •  0
  • D. Müller  · 技术社区  · 5 年前

    backpressure 启用和 spark.streaming.kafka.maxRatePerPartition set),将数据流映射到一个数据集,并将此数据集写入Parquet文件(内部 DStream.foreachRDD )在每批货的最后。

    一开始,一切似乎都很好,Spark流处理时间约为10秒,批处理间隔为30秒。生成的Kafka消息的数量比我们在Spark应用程序中消耗的消息量要少一些,因此不需要背压(在开始的时候)。Spark作业在我们的Spark Warehouse HDFS目录中创建了许多拼花文件(x Partitions=>x Parquet files per Batch),正如预期的那样。

    每件事都能正常运行数小时,但大约12-14小时后,我们的处理时间迅速增加,例如,从一个批次到下一个批次,我们的处理时间从正常的10秒跳到了1分钟以上。这当然会在短时间内导致一个巨大的批处理队列。

    我们在5分钟的批次中看到了类似的结果(这里的处理时间约为1.5分钟,在一段时间后,每批处理时间突然增加到10分钟以上)。

    由于批处理可以独立运行,所以我们没有使用Spark Streaming的检查点特性。

    我们使用的是Hortonworks数据平台3.1.4和Spark 2.3.2和Kafka 2.0.0。

    这是火花流的已知问题吗?旧的拼花桌上有“奥克牌”吗?或者这是一个基于文件的问题还是基于Hadoop的问题?谢谢你的帮助。

    0 回复  |  直到 5 年前