gpt4 book ai didi

java - 是否可以从没有安装 Spark 的主机启动 Spark 应用程序

转载 作者:行者123 更新时间:2023-12-01 12:12:14 25 4
gpt4 key购买 nike

我有一个使用 Spark 独立实例设置的远程主机(现在在同一台机器上一个主站和一个从站)。我也有本地 Java 代码 spark-core依赖项和带有实际 Spark 应用程序的打包 jar。我正在尝试使用 SparkLauncher 启动它类,如其 Javadoc 中所述。

这里是依赖:

        <groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>

这是躺椅的代码:
        new SparkLauncher()
.setVerbose(true)
.setDeployMode("cluster")
.setSparkHome("/opt/spark/current").setAppResource(Resources.getResource("validation.jar").getPath())
.setMainClass("com.blah.SparkTestApplication")
.setMaster("spark://" + sparkMasterHostWithPort))
.startApplication();

我得到的错误是 path not found /opt/spark/current/或者,如果我删除 setSparkHome调用, Spark home not found; set it explicitly or use the SPARK_HOME environment variable .

这是我的幼稚问题:是否有任何解决方法允许我不在我只想运行 Launcher 的本地主机上安装 Spark 二进制文件?为什么依赖项中引用的 Spark Java 代码不能/不足以连接到某些已配置的远程 Spark Master 并提交应用程序 jar?即使我将 Spark 二进制文件、应用程序代码甚至 Spark Java jar 放在 hdfs 位置并使用其他部署方法(如​​ YARN),是否仅使用 Launcher 来触发提交并远程启动就足够了?

原因是我想避免在多个客户端节点上安装 Spark 二进制文件只是为了从那里提交和启动动态创建/修改的 Spark 应用程序,这对我来说听起来像是一种浪费。更不用说每次提交都需要将应用程序打包在 jar 中。

最佳答案

简短回答:您必须在客户端机器上安装 spark 二进制文件和 SPARK_HOME指向它的环境变量。

长答案:但是,如果您想在远程集群上启 Action 业,那么您可以在 spark 作业中使用以下配置:

val spark = SparkSession.builder.master("yarn") 
.config("spark.submit.deployMode", "cluster")
.config("spark.driver.host", "remote.spark.driver.host.on.the.cluster")
.config("spark.driver.port", "35000")
.config("spark.blockManager.port", "36000")
.getOrCreate()
spark.driver.portspark.blockManager.port不是强制性的,但如果您在封闭环境中工作,例如 kubernetes 网络,并且为 spark 客户端 pod 定义了一些端口网关服务,则需要。

SparkLauncher 的主设置中定义远程主机不管用。你需要从集群中获取hadoop配置,通常它位于 /etc/hadoop/conf在集群节点上。将 hadoop config 目录放在客户端机器中并指向 HADOOP_CONF_DIR环境变量给它。这应该足以开始。

关于java - 是否可以从没有安装 Spark 的主机启动 Spark 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46578747/

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