Spark应用程序的动态资源分配不起作用

时间:2019-04-08 07:30:50

标签: apache-spark

我是Spark的新手,他试图弄清楚动态资源分配是如何工作的。我有一个Spark结构化的流应用程序,该应用程序试图一次从Kafka读取百万条记录并进行处理。我的应用程序始终以3个执行程序开头,并且从不增加执行程序的数量。

需要5至10分钟才能完成处理。我认为这会增加执行程序的数量(最多10个),并尽早完成处理,这没有发生。我在这里缺少什么?这应该如何工作?

我在Ambari中为Spark设置了以下属性

spark.dynamicAllocation.enabled = true
spark.dynamicAllocation.initialExecutors = 3
spark.dynamicAllocation.maxExecutors = 10
spark.dynamicAllocation.minExecutors = 3
spark.shuffle.service.enabled = true

下面是我的提交命令的样子

/usr/hdp/3.0.1.0-187/spark2/bin/spark-submit --class com.sb.spark.sparkTest.sparkTest --master yarn --deploy-mode cluster --queue default sparkTest-assembly-0.1.jar

火花代码

//read stream
val dsrReadStream = spark.readStream.format("kafka")
   .option("kafka.bootstrap.servers", brokers) //kafka bokers
   .option("startingOffsets", startingOffsets) // start point to read
   .option("maxOffsetsPerTrigger", maxoffsetpertrigger) // no. of records per batch
   .option("failOnDataLoss", "true")

 /****
 Logic to validate format of loglines. Writing invalid log lines to kafka and store valid log lines in 'dsresult'

 ****/

//write stream
val dswWriteStream =dsresult.writeStream
    .outputMode(outputMode) // file write mode, default append
    .format(writeformat) // file format ,default orc
    .option("path",outPath) //hdfs file write path
    .option("checkpointLocation", checkpointdir) location
    .option("maxRecordsPerFile", 999999999) 
    .trigger(Trigger.ProcessingTime(triggerTimeInMins))

2 个答案:

答案 0 :(得分:0)

动态资源分配不适用于Spark Streaming

Refer this link

答案 1 :(得分:0)

只是为了进一步澄清,

spark.streaming.dynamicAllocation.enabled = true

仅适用于Dstreams API。参见Jira

此外,如果您设置

spark.dynamicAllocation.enabled = true

并运行结构化的流作业,将启动批处理动态分配算法,这可能不是最佳选择。参见Jira