Hadoop的Spring:CDH5.8上批量spark示例的问题

Hadoop的Spring:CDH5.8上批量spark示例的问题,spring,hadoop,cloudera-cdh,Spring,Hadoop,Cloudera Cdh,我想跑 在ClouderaHadoop 5.8(快速启动)上。我遵循此指南尝试设置所有内容: 我修复了与以下内容相关的所有版本: 上传至HDFS的spark assembly为spark-assembly_2.10-1.6.0-cdh5.8.0.jar 将pom.xml中的属性spring-data-hadoop.version移到了版本2.4.0.RELEASE-cdh5 将pom.xml中的属性spark.version移动到1.6 我能够构建项目,将构建的工件上传到CDH5.8Qu

我想跑

在ClouderaHadoop 5.8(快速启动)上。我遵循此指南尝试设置所有内容:

我修复了与以下内容相关的所有版本:

  • 上传至HDFS的spark assembly为spark-assembly_2.10-1.6.0-cdh5.8.0.jar
  • 将pom.xml中的属性spring-data-hadoop.version移到了版本2.4.0.RELEASE-cdh5
  • 将pom.xml中的属性spark.version移动到1.6
我能够构建项目,将构建的工件上传到CDH5.8QuickStart的VM上,但在尝试运行时,批处理失败

在Cloudera Manager上检查日志时,我看到以下错误:

线程“main”java.lang.NoClassDefFoundError中出现异常: org/apache/hadoop/conf/Configuration位于 位于的java.lang.Class.getDeclaredMethods0(本机方法) java.lang.Class.privateGetDeclaredMethods(Class.java:2570)位于 java.lang.Class.getMethod0(Class.java:2813)位于 java.lang.Class.getMethod(Class.java:1663)位于 位于的sun.launcher.launchelper.getMainMethod(launchelper.java:494) launcher.LaunchHelper.checkAndLoadMain(LaunchHelper.java:486) 原因:java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration位于 java.net.URLClassLoader$1.run(URLClassLoader.java:366)位于 java.net.URLClassLoader$1.run(URLClassLoader.java:355)在 java.security.AccessController.doPrivileged(本机方法)位于 java.net.URLClassLoader.findClass(URLClassLoader.java:354)位于 loadClass(ClassLoader.java:425)位于 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)位于 loadClass(ClassLoader.java:358)。。。还有6个

我试图通过以下命令提交Spark作业

  • sudo-u hdfs spark submit--class Hashtags--master warn--deploy mode cluster app/spark-Hashtags_2.10-0.1.0.jarhdfs://quickstart.cloudera:8020/demo/hashtags/input/tweets.dat hdfs://quickstart.cloudera:8020/demo/hashtags/output*
(模拟hdfs脚本以手动准备输入和输出文件夹)

一切都很顺利

我能够检查资源管理器的日志,以便找到Spring批处理的tasklet生成的启动命令与spark submit命令之间的任何差异,我发现:

  • spark submit提出以下建议:
org.apache.hadoop.warn.server.resourcemanager.amlauncher.amlauncher: 启动容器容器的命令\u 1486926591393\u 0015\u 02\u000001: LD_LIBRARY_PATH=“/usr/lib/hadoop/lib/native:$LD_LIBRARY_PATH”,{JAVA_HOME}/bin/JAVA,-server,-Xmx1024m,-Djava.io.tmpdir={{PWD}/tmp,-Dspark.warn.app.container.log.dir=,-XX:MaxPermSize=256m,org.apache.spark.deploy.warn.application.ApplicationMaster,--class,'Hashtags','Hashtags',-jar,file:/HOME/cloudera/spring-batch-spark-spark/app/app/app-Hashtags-1.0-arg,“/tmp/hashtags/input/tweets.dat”、--arg、/tmp/hashtags/output”、--executor memory,1024m、--executor cores,1、--properties file,{{PWD}/spark_conf/spark_conf.properties,1>,/stdout,2>,/stderr

  • Spring Batch的tasklet生成以下内容:
org.apache.hadoop.warn.server.resourcemanager.amlauncher.amlauncher: 启动容器容器的命令\u 1486833100526\u 0006\u 01\u000001: {{JAVA_HOME}}/bin/JAVA,-server,-Xmx1024m,-Djava.io.tmpdir={PWD}/tmp,-Dspark.thread.app.container.log.dir=,-XX:MaxPermSize=256m,org.apache.spark.deploy.thread.ApplicationMaster,--class,'Hashtags',jar,file:/HOME/cloudera/spring batch spark/app/spark/spark-Hashtags\u 2.10-0.1.0.jar,--arg,'hdfs://quickstart.cloudera:8020/demo/hashtags/input/tweets.dat“,--arg,'hdfs://quickstart.cloudera:8020/demo/hashtags/output“,--executor memory,1024m,--executor cores,1,--properties file,{{{PWD}/spark_conf/spark_conf.properties,1>,/stdout,2>,/stderr

正如您所看到的,spark submit添加了LD_LIBRARY_路径,而Spring Batch的tasklet没有添加这一路径,因为这似乎是唯一不同的事情,所以我认为存在问题

由于我对这个话题的知识贫乏,我无法理解幕后发生了什么。 你们有没有遇到过这个问题

谢谢大家。
Guido

感谢您的详细比较。我不认为LD_LIBRARY_路径会导致这个特定的错误,我想知道
--arg
值中的差异是否有任何影响。对于spark submit示例,您使用了
/tmp
vs
hdfs://quickstart.cloudera:8020/demo/
用于spring hadoop one。你能用
hdfs://quickstart.cloudera:8020/demo/
前缀


更新:Cloudera提供的程序集jar“spark-assembly-1.6.0-cdh5.8.0-hadoop2.6.0-cdh5.8.0.jar”似乎缺少Hadoop配置类,无法与“spring data Hadoop spark”功能一起使用。您必须在下载中使用Spark项目提供的完整组装jar。我使用“spark-assembly-1.6.2-hadoop2.6.0.jar”进行了测试,它在Cloudera QuickStart VM 5.8上运行良好。

非常感谢您并为我的错误感到抱歉。实际上,我按照您的建议运行spark submit命令(
sudo-u hdfs spark submit--class Hashtags--master warn--deploy mode cluster app/spark-Hashtags_2.10-0.1.0.jar)hdfs://quickstart.cloudera:8020/demo/hashtags/input/tweets.dat hdfs://quickstart.cloudera:8020/demo/hashtags/output
)它是有效的:当从Spring Batch的tasklet启动时,作业失败,因为我的初始帖子中报告了堆栈跟踪。我会看看我是否可以在我的机器上针对Cloudera QuickStart VM运行它,我会告诉你我发现了什么。我将非常感谢,非常感谢你的帮助!我能够运行针对CDH 5.8 Quickstart的示例!!!我基本上必须创建类
com.springdeveloper.demo.enhancedsparkyantasklet
,作为
org.springframew的克隆