我正在使用直接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配置中设置了以下选项,以避免作业进入队列状态,
如果在申请处理的任何阶段出错,请纠正我吗?
答案 0 :(得分:1)
首先,正如@Marie在评论中所提到的,pandas部分将在驱动程序上执行locally
含义。如果你想这样做,--driver-memory
必须增加,这有点会破坏分布式处理的目的。话虽这么说,最好从5-10秒开始播放你的批处理间隔并缓慢地进行。除了您可以调整的参数之外,还有spark.streaming.concurrentJobs
,由于原因here,文档中未提及该文档。从10增加此值以查看最适合的值。关于流媒体应用程序优化的博客文章很多,这些文章都涉及到设置,其中一些已经执行过。您可能还想添加"spark.serializer": "org.apache.spark.serializer.KryoSerializer"
,其好处将在here解释。