gpt4 book ai didi

java - 在 Java 代码中使用客户端将 Spark Streaming 作业提交到 YARN 时无法设置配置

转载 作者:可可西里 更新时间:2023-11-01 15:28:50 26 4
gpt4 key购买 nike

我正在寻找在 Java 代码中将我的 Spark Streaming 作业提交到 YARN 的方法,并最终决定使用 org.apache.spark.deploy.yarn.Client 来提交。一切看起来都很好,但现在我发现我无法设置 Spark 或 Spark Streaming 的配置,例如 spark.dynamicAllocation.enabled

我试过各种方法,比如设置SparkConf用于创建JavaSparkContext,设置SparkConf用于创建 ClientArgumentsClient,并使用 System.setProperty(xxx),但它们都不起作用。我打算动态设置配置,但即使我修改了 spark-defaults.conf,也没有任何改变。

我也尝试过其他提交作业的方法,比如使用 SparkSubmit.main(xxx)Runtime.getRuntime.exec("spark-submit", "xxx"),但除了这个问题,他们还有更多问题,看起来不像是推荐的方法。

谁能告诉我解决方法?

最佳答案

您可以使用 SparkLauncher从 Java 代码在 Yarn 集群上运行 Spark 作业。例如,我用它从我的 java web 应用程序运行我的 spark 作业,spark 作业 jar 被打包到一个 web 应用程序 jar 中。

如果您使用 spark 1.5 及更低版本,它将看起来像这样(请参阅 SparkLauncher package):

    Process sparkLauncherProcess = new SparkLauncher()
.setSparkHome(SPARK_HOME)
.setJavaHome(JAVA_HOME)
.setAppResource(SPARK_JOB_JAR_PATH)
.setMainClass(SPARK_JOB_MAIN_CLASS)
.addAppArgs("arg1", "arg2")
.setMaster("yarn-cluster")
.setConf("spark.dynamicAllocation.enabled", "true")
.launch();
sparkLauncherProcess.waitFor();

如果您使用 spark 1.6 及更高版本,它将看起来像这样(请参阅 SparkLauncher package SparkAppHandle 具有一些附加功能):

    SparkAppHandle handle = new SparkLauncher()
.setSparkHome(SPARK_HOME)
.setJavaHome(JAVA_HOME)
.setAppResource(SPARK_JOB_JAR_PATH)
.setMainClass(SPARK_JOB_MAIN_CLASS)
.addAppArgs("arg1", "arg2")
.setMaster("yarn-cluster")
.setConf("spark.dynamicAllocation.enabled", "true")
.startApplication();

你唯一需要的依赖是:

    <dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-launcher_2.11</artifactId>
<version>1.5.0</version>
<scope>provided</scope>
</dependency>

关于java - 在 Java 代码中使用客户端将 Spark Streaming 作业提交到 YARN 时无法设置配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38606651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com