注意:EC2 特定答案,而不是一般 Spark 答案。只是试图完善一年前提出的问题的答案,这个问题具有相同的症状,但往往有不同的原因,并且困扰了很多人。
如果我正确理解了这个问题,那么您会问:“我需要手动复制 jar 文件吗?如果需要,复制到哪个目录?”你说,“并设置 SparkConf 来分发类”,但你不清楚这是通过 Spark-env.sh 还是 Spark-defaults.conf 完成的?因此,做出一些假设,主要的一个是您正在集群模式下运行,这意味着您的驱动程序在其中一个工作人员上运行,而您事先不知道是哪一个......然后......
答案是肯定的,到类路径中指定的目录。在 EC2 中,唯一的持久数据存储是 /root/persistent-hdfs,但我不知道这是否是一个好主意。
在 EC2 上的 Spark 文档中我看到这一行:
To deploy code or data within your cluster, you can log in and use
the provided script ~/spark-ec2/copy-dir, which, given a directory
path, RSYNCs it to the same location on all the slaves.
SPARK_CLASSPATH
我不会使用 SPARK_CLASSPATH 因为它从 Spark 1.0 开始已被弃用,所以一个好主意是在 $SPARK_HOME/conf/spark-defaults.conf 中使用它的替代品:
spark.executor.extraClassPath /path/to/jar/on/worker
这应该是有效的选项。如果您需要即时执行此操作,而不是在conf文件中执行此操作,建议是“./spark-submit with --driver-class-path to Expand the driver classpath”(来自 Spark 文档关于spark.executor.extraClassPath并参阅另一个来源的答案末尾)。
但是......你没有使用spark-submit......我不知道它在EC2中是如何工作的,查看脚本我没有弄清楚EC2让你在命令行上提供这些参数。您提到您已经在设置 SparkConf 对象时执行了此操作,因此如果这对您有用,请坚持下去。
我在 Spark 年中看到这是一个非常古老的问题,所以我想知道你是如何解决它的?我希望这对某人有帮助,我在研究 EC2 的细节方面学到了很多东西。
我必须承认,作为对此的限制,它让我感到困惑Spark 文档为spark.executor.extraClassPath它说:
用户通常不需要设置此选项
我认为他们的意思是大多数人会通过驱动程序配置选项获取类路径。我知道spark-submit的大多数文档都让它应该像脚本处理在集群中移动代码一样,但我认为这只是在“独立客户端模式”下,我假设你没有使用它,我假设EC2必须处于“独立”模式集群模式。”
有关 SPARK_CLASSPATH 弃用的更多/背景:
更多背景让我思考 SPARK_CLASSPATH此存档线程已被弃用。 and 这一条,穿过另一条线 and 这是关于使用 SPARK_CLASSPATH 时出现的 WARN 消息:
14/07/09 13:37:36 WARN spark.SparkConf:
SPARK_CLASSPATH was detected (set to 'path-to-proprietary-hadoop-lib/*:
/path-to-proprietary-hadoop-lib/lib/*').
This is deprecated in Spark 1.0+.
Please instead use:
- ./spark-submit with --driver-class-path to augment the driver classpath
- spark.executor.extraClassPath to augment the executor classpath