使用Spark REST HTTP服务器提交Java作业时如何读取spark-defaults.conf
通过Spark REST API提交Java Spark作业并加载spark-defaults.conf
要让Java作业通过SparkSubmit运行(从而自动读取spark-defaults.conf),你可以沿用PySpark的思路,将mainClass设为org.apache.spark.deploy.SparkSubmit,然后把--class参数和你的作业主类作为appArgs传入。具体配置如下:
示例CURL请求
curl -X POST http://localhost:6066/v1/submissions/create \ --header "Content-Type:application/json;charset=UTF-8" \ --data '{ "action" : "CreateSubmissionRequest", "appArgs" : [ "--class", "com.yourcompany.YourSparkMainClass" ], "appResource" : "s3n://<bucket-Name>/your-spark-job.jar", "environmentVariables" : { "SPARK_ENV_LOADED" : "1" }, "mainClass" : "org.apache.spark.deploy.SparkSubmit", "sparkProperties" : { "spark.driver.supervise" : "false", "spark.app.name" : "Java Spark App", "spark.eventLog.enabled": "true", "spark.submit.deployMode" : "cluster", "spark.master" : "spark://localhost:6066" } }'
关键参数说明
mainClass:固定为org.apache.spark.deploy.SparkSubmit,让REST服务器通过SparkSubmit启动你的作业,由它负责加载spark-defaults.confappArgs:传入--class和你的作业主类全限定名,这对应命令行中spark-submit --class的参数作用appResource:指定你的Java Spark作业Jar包的路径,支持HDFS、S3等分布式存储路径
替代方案:直接在作业代码中加载配置
如果不想通过SparkSubmit代理,也可以在Java作业代码中显式加载spark-defaults.conf:
import org.apache.spark.SparkConf; public class YourSparkMainClass { public static void main(String[] args) { SparkConf conf = new SparkConf() .setAppName("Java Spark App") .loadFromSystemProperties(); // 加载spark-defaults.conf中的配置 // 初始化SparkSession // SparkSession spark = SparkSession.builder().config(conf).getOrCreate(); } }
这种方式需要确保作业运行环境能正确访问到spark-defaults.conf文件,不如通过SparkSubmit的方式省心。
内容的提问来源于stack exchange,提问作者yogi
相关产品推荐
相关产品推荐

