我有一些像script.sh运行的作业:
JobA
JobB
每个作业都通过脚本运行,集群“看到”每个作业。
所以我的目的是将所有工作打包成一个大工作,这样集群处理就像一个独特的工作。
我一直在使用像这样的库Spark Launcher
class jobLaunch{
val spark = new SparkLauncher()
.setAppResource("../lib/assembly-4.0.0-SNAPSHOT.jar") // TODO
.setMainClass("com.main.class")
.setMaster("yarn")
.setConf("spark.ui.port","1234")
.launch()
def startExternalProcess = {
val processOut = spark.getInputStream
var is_finished = false
new Thread(new Runnable() {
def run() {
val exit = spark.exitValue()
is_finished = true
}
}).start()
new Thread(new Runnable() {
def run() {
while (!is_finished) {
scala.io.Source.fromInputStream(processOut).getLines.foreach{info(_)}
Thread.sleep(1000)
}
}
}).start()
info("hello there")
val exit = spark.exitValue()
}
...
override def run(sc: SparkContext, hivec: HiveContext): Unit = {
val jl = new jobLaunch
val jl2 = new jobLaunch
jl.startExternalProcess
jl2.startExternalProcess
}
}
此代码用于测试目的,当我运行时,我意识到在不使用群集的情况下运行就像proccess的作业。
所以我仍然不知道我是否可以在一份工作中运行子工作。