注意:EC2特定的答案,而不是普通的Spark答案。只是试图回答一年前问过的一个问题,一个问题具有相同的症状,但往往不同的原因,并绊倒了很多人。
如果我正确地理解了这个问题,你会问:“我需要手动复制jar文件吗?如果是,请指向哪个目录?”你说,“并设置SparkConf来分配类”,但你不清楚这是通过spark-env.sh还是spark-defaults.conf完成的?所以,做一些假设,其中最主要的是你在集群模式下运行,这意味着你的驱动器上的一个工人跑,你不知道哪提前一个...然后... ...
答案是肯定的,到类路径中命名的dir。在EC2中,唯一的持久数据存储是/ root/persistent-hdfs,但我不知道这是个好主意。
In the Spark docs on EC2 I see this line:
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
,因为它不赞成星火1.0的我不会用SPARK_CLASSPATH这么一个好主意,就是用它在$ SPARK_HOME/conf目录/火花缺省更换。 conf:
spark.executor.extraClassPath /path/to/jar/on/worker
这应该是有效的选项。如果您需要在运行中执行此操作,而不是在conf文件中,则建议为“./spark-submit with --driver-class-path来扩充驱动程序类路径”(from Spark docs about spark.executor.extraClassPath并查看其他来源的答案的结尾那)。
但是......你没有使用spark-submit ......我不知道EC2是如何工作的,看着脚本我没弄清楚EC2让你在命令行上提供这些参数。你提到你已经在设置你的SparkConf对象时这么做了,所以如果这对你有用的话。
我在Spark-years看到这是一个很老的问题,所以我想知道你是如何解决它的?我希望这能帮助别人,我学到了很多关于EC2的具体细节。
我必须承认,作为这个限制,它混淆了我在Spark docs that for spark.executor.extraClassPath它说:
用户通常不应该需要设置这个选项
我以为他们意味着大多数人会通过驱动程序配置选项获取类路径。我知道spark-submit的大部分文档都应该像脚本句柄一样在集群周围移动你的代码,但我认为这只是在“独立客户端模式”下,我假设你没有使用,我假设EC2必须是“独立的集群模式“。
更多/背景ON SPARK_CLASSPATH折旧:
更多的背景下,使我认为SPARK_CLASSPATH is deprecated is this archived thread.和this one, crossing the other thread和this one about a WARN message when using SPARK_CLASSPATH:
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
一种解决方法,它的工作原理,是对罐子复制到每个工人并将其明确添加到每个工人的“SPARK_CLASSPATH”上。 – SRobertJames
由于上面的问题和评论,SPARK_CLASSPATH现在已被弃用。 – JimLohse