Spark工作人员无法在EC2群集上找到JAR

SRo*_*mes 5 amazon-ec2 apache-spark

我正在使用spark-ec2运行一些Spark代码.当我将master设置为"local"时,它运行正常.但是,当我将master设置为$ MASTER时,工作程序会立即失败,并为类提供java.lang.NoClassDefFoundError.工作人员连接到主人,并显示在UI中,并尝试运行任务; 但是一加载第一个依赖类(在程序集jar中)就立即引发异常.

我已经使用sbt-assembly来创建一个带有类的jar,使用jar tvf确认类是否存在,并设置SparkConf来分发类.Spark Web UI确实显示了要添加到类路径的程序集jar: http://172.xxx47441/jars/myjar-assembly-1.0.jar

看来,尽管myjar-assembly包含了类,并且正在被添加到集群中,但它并没有到达工作者.我该如何解决?(我是否需要手动复制jar文件?如果是这样,哪个dir?我认为SparkConf添加jar的意思是自动执行此操作)

我的调试尝试表明:

  1. 程序集jar被复制到/ root/spark/work/app-xxxxxx/1 / (由ssh确定为worker并搜索jar)
  2. 但是,该路径不会出现在worker的类路径中 (由日志显示,显示java -cp但缺少该文件)

所以,似乎我需要告诉Spark将程序集jar的路径添加到worker的类路径中.我怎么做?或者还有另一个罪魁祸首?(我花了几个小时试图调试这个,但无济于事!)

Ksh*_*tha -1

您需要在提交应用程序时向 Spark 集群注册一个 jar,以便您可以按如下方式编辑代码。

jars(0) = "/usr/local/spark/lib/spark-assembly-1.3.0-hadoop2.4.0.jar"
val conf: SparkConf = new SparkConf()
.setAppName("Busigence App")
.setMaster(sparkMasterUrl)
.setSparkHome(sparkHome)
.setJars(jars);
Run Code Online (Sandbox Code Playgroud)