2016-06-30 31 views
1

我正在测试从csv加载数据并将其保存在Elasticsearch中,但我在使用spark时将我的RDD集合保存在Elasticsearch中遇到了一些麻烦。 提交作业时引发此错误:Elasticsearch的Spark(Java)

Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch/spark/rdd/api/java/JavaEsSpark 

但自从我使用Maven编译我的依赖应该是正确的......

我的pom.xml的是在这里:http://pastebin.com/b71KL903

当我到达这条线将引发错误:

我的代码
JavaEsSpark.saveToEs(javaRDD, "index/logements"); 

休息是在这里:http://pastebin.com/8yuJB68A

我已经搜索关于这个问题,但没有发现任何东西: https://discuss.elastic.co/t/problem-between-spark-and-elasticsearch/51942

https://github.com/elastic/elasticsearch-hadoop/issues/713

https://github.com/elastic/elasticsearch-hadoop/issues/585

我刚刚得知: 的“ClassNotFoundException的”出现,因为星火将关闭其在工作异常的情况下,立即类加载器,从而需要装载的任何其它类,会失败,从而导致要隐藏的初始误差。

但我不知道如何继续。我提出我的工作用详细模式,但没有看到任何东西:http://pastebin.com/j6zmyjFr

感谢您进一步的帮助:)

回答

2

星火有执行者和驱动程序的过程。 Executor运行在与驱动程序节点不同的节点上。 Spark根据转换计算各个阶段的rdd图。这些阶段具有执行者执行的任务。因此,如果您使用库方法计算rdd,则需要将相关jar传递给执行程序和驱动程序。

你应该通过在--jars选项依赖jar火花提交

spark-submit --jars $JARS \ 
    --driver-class-path $JARS_COLON_SEP \ 
    --class $CLASS_NAME $APP_JAR 

你的情况,这将是

spark-submit --jars elasticsearch-hadoop-2.3.2.jar \ 
    --master local[4]\ 
    --driver-class-path elasticsearch-hadoop-2.3.2.jar \ 
    --class "SimpleApp" target/simple-project-1.0.jar 
+0

我不知道我需要什么驱动程序类路径和什么级别。 我添加了jar elasticsearch-hadoop,但我不知道要在 – kulssaka

+0

之后添加什么内容你能否粘贴你的spark-submit命令? – Knight71

+0

bin/spark-submit --verbose --class“SimpleApp”--master local [4] target/simple-project-1.0.jar --jars elasticsearch-hadoop-2.3.2.jar 然后什么驱动程序类我需要补充?它似乎缺少的类是JavaEsSpark 谢谢 – kulssaka