如何优化Spark Streaming进程从Kafka队列中读取大数据集

时间:2017-01-24 18:19:58

标签: apache-spark apache-kafka spark-streaming

我从Kafka读取流数据并使用Spark Streaming处理它。每30分钟的数据量约为1 MB。 我将批处理间隔设置为等于5分钟。当我启动具有最小偏移量的Spark Streaming作业时,它应该处理大约500Mb。由于某种原因,处理它需要很长时间(大约5个小时),尽管处理操作并不复杂(一些基于字段和分组的数据过滤)。 我想知道它是否与我的代码中的spark submit命令和Kafka参数的参数有关。例如,我正在阅读here,了解是否需要在Scala中设置Kafka Consumer的fetch.min.bytesfetch.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"

0 个答案:

没有答案