使用Direct Kafka API运行火花流应用程序所需的最佳资源是什么?

时间:2017-08-28 10:13:03

标签: python pyspark apache-kafka spark-streaming

我正在使用直接Kafka API运行我的spark流应用程序,批处理间隔为1分钟,并且在Pyspark的应用程序代码中使用Pandas。

以下是我的群集配置: 3个数据节点,每个数据节点的容量为8核,12GB RAM。

我提供了以下参数的spark-submit作业,

--master yarn
--deploy-mode cluster
--executor-memory 2G
--total-executor-cores 4
--num-executors 11 

但我的SPARK用户界面显示我的有效批次处于QUEUE状态,

config("spark.streaming.backpressure.enabled", "true") \
.config("spark.streaming.kafka.maxRatePerPartition","200") \  

根据回答的一些帖子/问题,我在下面指定的spark配置中设置了以下选项,以避免作业进入队列状态,

如果在申请处理的任何阶段出错,请纠正我吗?

1 个答案:

答案 0 :(得分:1)

首先,正如@Marie在评论中所提到的,pandas部分将在驱动程序上执行locally含义。如果你想这样做,--driver-memory必须增加,这有点会破坏分布式处理的目的。话虽这么说,最好从5-10秒开始播放你的批处理间隔并缓慢地进行。除了您可以调整的参数之外,还有spark.streaming.concurrentJobs,由于原因here,文档中未提及该文档。从10增加此值以查看最适合的值。关于流媒体应用程序优化的博客文章很多,这些文章都涉及到设置,其中一些已经执行过。您可能还想添加"spark.serializer": "org.apache.spark.serializer.KryoSerializer",其好处将在here解释。