我想使用不同的Fair Scheduler pools执行不同的Spark Streaming作业。我正在使用Spark GitHub存储库中的NetworkWordCount
示例。我将其修改为运行3个权重分别为1,5,10的池。
我知道使用Spark Streaming时,必须使用此workaround将作业分配给特定池,因此我以这种方式修改了代码:
wordCounts.foreachRDD(rdd =>
rdd.sparkContext.setLocalProperty("spark.scheduler.pool", poolName)
)
wordCounts.foreachRDD(rdd =>
println(rdd.sparkContext.getLocalProperty("spark.scheduler.pool"))
)
wordCounts.print()
来自第二个foreachRDD
中的打印我可以看到所有池都在工作但它们不尊重分配给它们的优先级。每个池都有自己的数据源,所有这些都以相同的单词/秒速率运行。由于工作负载是相同的,我认为问题出在其他地方,但我看不出它在哪里。
答案 0 :(得分:0)
我认为你需要在map
之前print
分配池(使用本地属性),即
wordCounts.map(rdd => rdd.sparkContext.setLocalProperty(“spark.scheduler.pool”,poolName))。print()
您也可以使用ssc.sparkContext
来设置池。