【问题标题】:Spark (Java) to ElasticsearchSpark (Java) 到 Elasticsearch
【发布时间】:2016-06-30 20:39:11
【问题描述】:

我正在测试从 csv 加载数据以触发然后将其保存在 Elasticsearch 中,但是我在使用 spark 将我的 RDD 集合保存在 Elasticsearch 中时遇到了一些麻烦。 提交作业时出现此错误:

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”是因为 Spark 将在发生异常时立即关闭其作业类加载器,因此任何其他需要加载的类都将失败,从而导致隐藏初始错误。

但我不知道如何继续。我使用详细模式提交了我的作业,但没有看到任何其他内容:http://pastebin.com/j6zmyjFr

感谢您的进一步帮助:)

【问题讨论】:

    标签: java maven elasticsearch apache-spark elasticsearch-hadoop


    【解决方案1】:

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

    您应该在 spark-submit 的 --jars 选项中传递依赖的 jars

        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  
    

    【讨论】:

    • 我不知道我需要什么驱动程序类路径和什么类。我添加了 jar elasticsearch-hadoop 但我不知道之后要添加什么
    • bin/spark-submit --verbose --class "SimpleApp" --master local[4] target/simple-project-1.0.jar --jars elasticsearch-hadoop-2.3.2.jar然后我需要添加什么驱动程序类?似乎缺少的类是 JavaEsSpark 谢谢
    • 你需要添加到驱动类路径的同一个 elasticsearch-hadoop jar。
    • bin/spark-submit --verbose --class "SimpleApp" --master local[4] target/simple-project-1.0.jar --jars elasticsearch-hadoop-2.3.2.jar不起作用,这是 JavaEsSpark 所需的唯一 jar。我也试过:../../bin/spark-submit --verbose --class "SimpleApp" --master local[4] target/simple-project-1.0.jar --jars elasticsearch-hadoop-2.3.2 .jar --driver-class-path elasticsearch-hadoop-2.3.2 --class "JavaEsSpark" 对不起,我是这方面的初学者...
    • 试试这个 spark-submit --jars elasticsearch-hadoop-2.3.2.jar \ --master local[4]\ --driver-class-path elasticsearch-hadoop-2.3.2.jar \ --class "SimpleApp" 目标/simple-project-1.0.jar \
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多