Spark Standalone 如何将本地 .jar 文件传递给集群
Spark Standalone how to pass local .jar file to cluster
我有一个集群,有两个工人和一个主人。
为了启动 master 和 workers,我在 master 的机器 中使用 sbin/start-master.sh
和 sbin/start-slaves.sh
。然后,master UI 告诉我 slaves 还活着(所以,到目前为止一切正常)。当我想使用 spark-submit
时,问题就来了。
我在我的本地机器上执行这个命令:
spark-submit --master spark://<master-ip>:7077 --deploy-mode cluster /home/user/example.jar
但是弹出如下错误:ERROR ClientEndpoint: Exception from cluster was: java.nio.file.NoSuchFileException: /home/user/example.jar
我一直在研究堆栈溢出和 Spark 的文档,看来我应该将 spark-submit
命令的 application-jar
指定为 "Path to a bundled jar including your application and all dependencies. The URL must be globally visible inside of your cluster, for instance, an hdfs:// path or a file:// path that is present on all nodes."(因为它表示 https://spark.apache.org/docs/latest/submitting-applications.html).
我的问题是:如何将我的 .jar 设置为在集群内全局可见? 这里有一个类似的问题 Spark Standalone cluster cannot read the files in local filesystem 但解决方案不起作用为了我。
此外,我是不是做错了什么,使用 sbin/start-master.sh
在我的主机机器中初始化集群,然后在我的本地机器中执行 spark-submit
?我在主人的终端内初始化主人,因为我在 Spark 的文档中读到过,但这可能与问题有关。来自 Spark 的文档:
Once you’ve set up this file, you can launch or stop your cluster with the following shell scripts, based on Hadoop’s deploy scripts, and available in SPARK_HOME/sbin: [...] Note that these scripts must be executed on the machine you want to run the Spark master on, not your local machine.
非常感谢
编辑:
我已经在每个工作人员中复制了文件 .jar 并且它可以工作。但我的意思是要知道是否有更好的方法,因为这种方法让我每次创建新 jar 时都将 .jar 复制到每个工作人员。 (这是已发布 link Spark Standalone cluster cannot read the files in local filesystem 问题的答案之一)
@meisan 你的 spark-submit
命令遗漏了两件事。
- 你的罐子应该添加标志
--jar
- 包含您的驱动程序代码的文件,即主要功能。
现在你没有指定任何地方,如果你使用的是 scala 或 python 但简而言之,你的命令将类似于:
对于 python :
spark-submit --master spark://<master>:7077 --deploy-mode cluster --jar <dependency-jars> <python-file-holding-driver-logic>
对于 scala:
spark-submit --master spark://<master>:7077 --deploy-mode cluster --class <scala-driver-class> --driver-class-path <application-jar> --jar <dependency-jars>
此外,当您使用记录的标志时,spark 会负责将所需的文件和 jar 发送给执行程序。
如果要省略 --driver-class-path
标志,可以将环境变量 SPARK_CLASSPATH
设置为放置所有 jars 的路径。
我有一个集群,有两个工人和一个主人。
为了启动 master 和 workers,我在 master 的机器 中使用 sbin/start-master.sh
和 sbin/start-slaves.sh
。然后,master UI 告诉我 slaves 还活着(所以,到目前为止一切正常)。当我想使用 spark-submit
时,问题就来了。
我在我的本地机器上执行这个命令:
spark-submit --master spark://<master-ip>:7077 --deploy-mode cluster /home/user/example.jar
但是弹出如下错误:ERROR ClientEndpoint: Exception from cluster was: java.nio.file.NoSuchFileException: /home/user/example.jar
我一直在研究堆栈溢出和 Spark 的文档,看来我应该将 spark-submit
命令的 application-jar
指定为 "Path to a bundled jar including your application and all dependencies. The URL must be globally visible inside of your cluster, for instance, an hdfs:// path or a file:// path that is present on all nodes."(因为它表示 https://spark.apache.org/docs/latest/submitting-applications.html).
我的问题是:如何将我的 .jar 设置为在集群内全局可见? 这里有一个类似的问题 Spark Standalone cluster cannot read the files in local filesystem 但解决方案不起作用为了我。
此外,我是不是做错了什么,使用 sbin/start-master.sh
在我的主机机器中初始化集群,然后在我的本地机器中执行 spark-submit
?我在主人的终端内初始化主人,因为我在 Spark 的文档中读到过,但这可能与问题有关。来自 Spark 的文档:
Once you’ve set up this file, you can launch or stop your cluster with the following shell scripts, based on Hadoop’s deploy scripts, and available in SPARK_HOME/sbin: [...] Note that these scripts must be executed on the machine you want to run the Spark master on, not your local machine.
非常感谢
编辑: 我已经在每个工作人员中复制了文件 .jar 并且它可以工作。但我的意思是要知道是否有更好的方法,因为这种方法让我每次创建新 jar 时都将 .jar 复制到每个工作人员。 (这是已发布 link Spark Standalone cluster cannot read the files in local filesystem 问题的答案之一)
@meisan 你的 spark-submit
命令遗漏了两件事。
- 你的罐子应该添加标志
--jar
- 包含您的驱动程序代码的文件,即主要功能。
现在你没有指定任何地方,如果你使用的是 scala 或 python 但简而言之,你的命令将类似于:
对于 python :
spark-submit --master spark://<master>:7077 --deploy-mode cluster --jar <dependency-jars> <python-file-holding-driver-logic>
对于 scala:
spark-submit --master spark://<master>:7077 --deploy-mode cluster --class <scala-driver-class> --driver-class-path <application-jar> --jar <dependency-jars>
此外,当您使用记录的标志时,spark 会负责将所需的文件和 jar 发送给执行程序。
如果要省略 --driver-class-path
标志,可以将环境变量 SPARK_CLASSPATH
设置为放置所有 jars 的路径。