我希望在相同的火花背景下按需运行不同的工作,但我不知道我究竟能做到这一点。
我尝试获取当前上下文,但似乎它创建了一个新的spark上下文(使用新的执行程序)。
我打电话给spark-submit来添加新工作。
我在Amazon EMR上运行代码,使用yarn作为资源管理器。
我的代码:
val sparkContext = SparkContext.getOrCreate()
val content = 1 to 40000
val result = sparkContext.parallelize(content, 5)
result.map(value => value.toString).foreach(loop)
def loop(x: String): Unit = {
for (a <- 1 to 30000000) {
}
}
火花提交:
spark-submit --executor-cores 1 \
--executor-memory 1g \
--driver-memory 1g \
--master yarn \
--deploy-mode cluster \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.shuffle.service.enabled=true \
--conf spark.dynamicAllocation.minExecutors=1 \
--conf spark.dynamicAllocation.maxExecutors=3 \
--conf spark.dynamicAllocation.initialExecutors=3 \
--conf spark.executor.instances=3 \
如果我运行两次spark-submit它会创建6个执行程序,但我想在同一个spark应用程序上运行所有这些作业。
如何在现有的火花应用程序中添加作业?
我读到了JobServer(https://github.com/spark-jobserver/spark-jobserver),它实现了我想做的事情,但我不明白他们是如何做到的。
答案 0 :(得分:0)
Spark JobServer正在使用Spark Context API以编程方式执行此操作。见https://github.com/spark-jobserver/spark-jobserver/blob/master/job-server/src/main/scala/spark/jobserver/JobManagerActor.scala#L288