我从Kafka读取流数据并使用Spark Streaming处理它。每30分钟的数据量约为1 MB。
我将批处理间隔设置为等于5分钟。当我启动具有最小偏移量的Spark Streaming作业时,它应该处理大约500Mb。由于某种原因,处理它需要很长时间(大约5个小时),尽管处理操作并不复杂(一些基于字段和分组的数据过滤)。
我想知道它是否与我的代码中的spark submit
命令和Kafka参数的参数有关。例如,我正在阅读here,了解是否需要在Scala中设置Kafka Consumer的fetch.min.bytes
和fetch.max.wait.ms
的均衡值。我是否可以限制批量大小,说所有这些500Mb应分成1Mb批次并单独处理?或者我应该将fetch.message.max.bytes
设置为例如1000000
字节(1Mb)?或者也许在Thread.sleep(3000)
和ssc.start()
之后添加ssc.awaitTermination()
是有意义的,以便为忘记旧的RDD提供一些时间来完成。
我的spark submit命令如下所示:
spark-submit --master yarn --deploy-mode cluster \
--driver-memory 10g --executor-memory 10g \
--num-executors 2 --conf "spark.executor.extraJavaOptions=-XX:+UseG1GC -XX:+AlwaysPreTouch" \
--class org.test.TestRunner \
--queue "myqueue" \
testprocess.jar \
"20" "5"