是否可以在代碼內執行spark-submit腳本,然後獲取由YARN分配的應用程序ID?在Scala代碼中運行spark-submit
bin/spark-submit
--class com.my.application.XApp
--master yarn-cluster --executor-memory 100m
--num-executors 50 hdfs://name.node.server:8020/user/root/x-service-1.0.0-201512141101-assembly.jar
1000
這是爲了使用戶能夠通過REST API啓動和停止作業。
我發現,
https://spark.apache.org/docs/latest/api/java/org/apache/spark/launcher/SparkLauncher.html
import org.apache.spark.launcher.SparkLauncher;
public class MyLauncher {
public static void main(String[] args) throws Exception {
Process spark = new SparkLauncher()
.setAppResource("/my/app.jar")
.setMainClass("my.spark.app.Main")
.setMaster("local")
.setConf(SparkLauncher.DRIVER_MEMORY, "2g")
.launch();
spark.waitFor();
}
}
但我無法找到一個方法來獲取應用ID,也好像app.jar具有高於執行前進行預建代碼?
這是否意味着不可能擁有包含Spark應用程序和Web服務的單個scala項目?目前,我的構建系統將服務和應用程序捆綁在一起。該服務包含啓動,停止等。 – nish1013
如果使用Process spark = new SparkLauncher() .setSparkHome(「C:\\ spark-1.4.1-bin-hadoop2.6」) .setAppResource(「C:\\ spark -1.4.1-bin-hadoop2.6 \\ lib \\ spark-examples-1.4.1-hadoop2.6.0.jar「) .setMainClass(」org.apache.spark.examples.SparkPi「)。setMaster(」紗簇「)啓動(); 有沒有辦法在Yarn中獲取application_id? – nish1013