Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接到现有Spark群集时,如何添加类或JAR?_Java_Scala_Apache Spark_Anonymous Function - Fatal编程技术网

Java 连接到现有Spark群集时,如何添加类或JAR?

Java 连接到现有Spark群集时,如何添加类或JAR?,java,scala,apache-spark,anonymous-function,Java,Scala,Apache Spark,Anonymous Function,我正在编写一个程序,作为客户端访问Spark群集。它是这样连接的: val sc = new SparkContext(new SparkConf(loadDefaults = false) .setMaster(sparkMasterEndpoint) .setAppName("foo") .set("spark.cassandra.connection.host", cassandraHost) .setJars(Seq("target/scala-2.11/foo_2.1

我正在编写一个程序,作为客户端访问Spark群集。它是这样连接的:

val sc = new SparkContext(new SparkConf(loadDefaults = false)
  .setMaster(sparkMasterEndpoint)
  .setAppName("foo")
  .set("spark.cassandra.connection.host", cassandraHost)

  .setJars(Seq("target/scala-2.11/foo_2.11-1.0.jar"))
)
[info] o.a.s.SparkContext - Added JAR target/scala-2.11/foo_2.11-1.0.jar at spark://192.168.51.15:53575/jars/foo_2.11-1.0.jar with timestamp 1528320841157
然后使用该上下文在Spark上运行操作。但是,我在代码中使用的任何lambdas/匿名函数都不能在Spark上运行。例如,我可能有:

val groupsDescription = sc.someRDD()
  .groupBy(x => x.getSomeString())
  .map(x => x._1 + " " + x._2.count(_ => true))
这将返回一个延迟计算的RDD,但当我尝试从该RDD中提取一些值时,Spark出现了以下异常:

java.lang.ClassNotFoundException: my.app.Main$$anonfun$groupify$1$$anonfun$2$$anonfun$apply$1
尽管我已经向Spark提供了应用程序的jar文件。我甚至看到一条日志行(在我的应用程序中,而不是在我的spark集群中)告诉我,jar是这样上传的:

val sc = new SparkContext(new SparkConf(loadDefaults = false)
  .setMaster(sparkMasterEndpoint)
  .setAppName("foo")
  .set("spark.cassandra.connection.host", cassandraHost)

  .setJars(Seq("target/scala-2.11/foo_2.11-1.0.jar"))
)
[info] o.a.s.SparkContext - Added JAR target/scala-2.11/foo_2.11-1.0.jar at spark://192.168.51.15:53575/jars/foo_2.11-1.0.jar with timestamp 1528320841157

我在任何地方都找不到关于这个问题的任何东西,这让我发疯了!怎么没有其他人介入这个问题?我看到的所有相关结果都是关于将您的JAR与
spark submit
捆绑使用的,这不是我正在做的,我有一个独立的应用程序,它连接到一个独立的spark群集。这是否根本不受支持?我还能错过什么?还有什么可能导致这种情况?

抛出ClassNotFoundException的代码与jar之间的关系是什么?我没看到什么?是什么让你认为jar中的类在executors上不可用?对不起,我想这并不准确。更准确地说,代码抛出某种类型的spark异常,将ClassNotFoundException封装到一些层中。与jar的关系是,这可能是执行者无法访问他们应该访问的代码的症状,我相信这就是为什么我们必须将jar上传给他们。然而,关于这件事,我知道的不多。我已经更新了我的问题来修正这个错误,我将再次设置我的项目,并重新运行它,以便在一秒钟内获得包装ClassNotFoundException的错误的确切堆栈跟踪。好的,现在我得到了一个不同的ClassNotFoundException,其中spark作业甚至没有退出队列!我正在使用这个spark cassandra连接器,我的执行器中似乎缺少连接器jar。这是有道理的,对吗?除此之外,我之前肯定没有包括这个连接器jar,所以我对发生的事情感到非常困惑。啊。我也要把它添加到我的
setJars
中,看看会发生什么,我想。为什么使用
setJars
而不是
--jars
或者甚至将整个依赖项集捆绑到一个jar文件中?