Spring for Hadoop:CDH 5.8上的批处理火花样本问题



我正在尝试运行

https://github.com/trisberg/springone-2015/tree/master/batch-spark

在Cloudera Hadoop 5.8(quickstart)上。我遵循了这个指南,试图设置一切:

http://docs.spring.io/spring-hadoop/docs/current/reference/html/springandhadoop-spark.html

我修复了所有与相关的版本

上传到HDFS的
  • 火花组件是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

我能够构建项目,将构建的工件上传到CDH 5.8 quickstart的VM上,但当尝试运行时,批处理失败。

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

线程"main"java.lang.NoClassDefFoundError中出现异常:org/apache/hadop/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.selauncher.LauncherHelper.getMainMethod(LauncherHelper.java:494)位于sun.selauncher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)引起原因:java.lang.ClassNotFoundException:org.apache.hoop.conf.配置位置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)java.lang.ClassLoader.loadClass(ClassLoader.java:425)sun.mic.Launcher$AppClassLoader.loadClass(Launcher.java:308)java.lang.ClassLoader.loadClass(ClassLoader.java:358)。。。6个

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

  • sudo-u hdfs spark-submit--class Hashtags--master yarn--deploy mode cluster-app/spark-Hashtags_2.10-01.0.jarhdfs://quickstart.cloudera:8020/demo/hashtags/input/tweets.dathdfs://quickstart.cloudera:8020/demo/hashtags/output*

(模拟hdfs脚本手动准备输入和输出文件夹)

一切都很顺利。

我能够检查资源管理器的日志,以找到Spring Batch的tasklet生成的启动命令和spark submit命令之间的任何区别,我发现:

  • spark-submit提出以下内容:

org.apache.hadoop.yarn.server.resourcemanager.amlauncher.amlauncher:启动容器容器的命令_1486926591393_0015_02_000001:LD_LIBRARY_PATH="/usr/lib/hadoop/lib/native:$LD_LIBRARY_PATH",{{JAVA_HOME}/bin/JAVA,-server,-Xmx1024m,-Djava.io.tmpdir={PWD}}/tmp,-Dspak.yarn.app.container.log.dir=,-XX:MaxPermSize=256m,org.apache.spark.deploy.yarn.ApplicationMaster,--class,'Hashtags',--jar,file:/HOME/cloudera/spring batch-spark/app/spark-Hashtags_2.10-0.0.jar,--arg,'/tmp/Hashtags/input/tweets.dat',--arg,"/tmp/hashtags/output",--执行器内存,1024m,--执行程序核心,1,--属性文件,{{PWD}}/spark_conf.属性,1>,/stdout,2>,/stderr

  • Spring Batch的tasklet生成以下内容:

org.apache.hadoop.yarn.server.resourcemanager.amlauncher.amlauncher:启动集装箱集装箱的命令_1486833100526-0006_01_0000001:{{JAVA_HOME}}/bin/JAVA,-server,-Xmx1024m,-Djava.io.tmpdir={{PWD}}/tmp,-Dspak.yarn.app.container.log.dir=,-XX:MaxPermSize=256m,org.apache.spark.deploy.yarn.ApplicationMaster,--class,'Hashtags',--jar,file:/HOME/cloudera/spring batch spark/app/spark-Hashtags_2.10-0.0.0.jar,--arg,'hdfs://quickstart.cloudera:8020/demo/hashtags/input/tweets.dat',--arg,'hdfs://quickstart.cloudera:8020/demo/hashtags/output',--执行程序内存,1024m,--执行器内核,1,--属性文件,{{PWD}}/spark_conf.properties,1>,/stdout,2>,/stderr

正如您所看到的,spark-submit添加了LD_LIBRARY_PATH,而Spring Batch的tasklet没有,因为这似乎是我认为问题存在的唯一不同之处。

由于我对这个话题知之甚少,我无法理解幕后发生的事情。你们中有人遇到这个问题吗?

谢谢大家。Guido

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

更新:看起来Cloudera提供的汇编jar"spark-assembly-1.60.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上运行良好。