我是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))
答案 0 :(得分:0)
动态资源分配不适用于Spark Streaming
答案 1 :(得分:0)