Spark作业-Scala对象以FIFO顺序读取,如何使其并行?
我有一个Scala-Spark程序,如下所示 这里的Scala对象季节、产品、供应商……组以串行顺序运行,FIFO,有没有办法使其并行?一次提交所有作业Spark作业-Scala对象以FIFO顺序读取,如何使其并行?,scala,apache-spark,Scala,Apache Spark,我有一个Scala-Spark程序,如下所示 这里的Scala对象季节、产品、供应商……组以串行顺序运行,FIFO,有没有办法使其并行?一次提交所有作业 import org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession object Main extends App { var appName: String = "DataExtract" var master: String = "local[*]"
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
object Main extends App {
var appName: String = "DataExtract"
var master: String = "local[*]"
val sparkConf: SparkConf = new SparkConf()
.setAppName(appName)
.setMaster(master)
val spark: SparkSession = SparkSession
.builder()
.config(sparkConf)
.getOrCreate()
Season.run(spark)
Product.run(spark)
Vendor.run(spark)
User.run(spark)
..
..
.
Group.run(spark)
}
要使spark作业异步运行,只需将它们包装到Future
:
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits._
import scala.concurrent.duration._
val jobs = Future.sequence(
List(
Future(Season.run(spark)),
Future(Product.run(spark)),
Future(Vendor.run(spark)),
Future(User.run(spark))
)
)
Await.result(jobs, 1 hour); //we need to block main thread
//to allow jobs in other threads to finish
//You can replace finite duration with Duration.Inf
此外,您还必须将spark job scheduler设置为“公平”:
伟大的我在帮助文档中找不到此选项,谢谢Atlasik@Sandeep540有关更多详细信息,请检查此项。我认为您还应该将
spark.scheduler.mode
设置为“FAIR”
,否则您的作业(虽然同时提交),可能会按顺序执行(在资源限制下),因为默认值为“FIFO”
。看。@mazaneicha谢谢你的评论,我忘了调度程序了。我编辑了我的anwser。
sparkConf.set("spark.scheduler.mode", "FAIR")