Spark (Java) 到 Elasticsearch
Spark (Java) to Elasticsearch
我正在测试从 csv 加载数据到 spark,然后将其保存在 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
感谢您的进一步帮助:)
Spark 有执行器和驱动程序进程。执行器运行在与驱动程序节点不同的节点中。 Spark 根据转换在不同阶段计算 rdd 图。这些阶段有在执行者上执行的任务。因此,如果您使用库方法计算 rdd,则需要将依赖的 jar 传递给执行程序和驱动程序。
您应该在 spark-submit
的 --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
我正在测试从 csv 加载数据到 spark,然后将其保存在 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
感谢您的进一步帮助:)
Spark 有执行器和驱动程序进程。执行器运行在与驱动程序节点不同的节点中。 Spark 根据转换在不同阶段计算 rdd 图。这些阶段有在执行者上执行的任务。因此,如果您使用库方法计算 rdd,则需要将依赖的 jar 传递给执行程序和驱动程序。
您应该在 spark-submit
的--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