- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在寻找在 Java 代码中将我的 Spark Streaming 作业提交到 YARN 的方法,并最终决定使用 org.apache.spark.deploy.yarn.Client 来提交。一切看起来都很好,但现在我发现我无法设置 Spark 或 Spark Streaming 的配置,例如 spark.dynamicAllocation.enabled
。
我试过各种方法,比如设置SparkConf
用于创建JavaSparkContext
,设置SparkConf
用于创建 ClientArguments
和 Client
,并使用 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/
我是一名优秀的程序员,十分优秀!