首页 文章

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

提问于
浏览
0

我想跑

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

在Cloudera Hadoop 5.8(快速入门) . 我按照本指南试图设置所有内容:

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

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

要上传到HDFS的

  • spark程序集是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快速启动的VM上上传构建的工件,但是,当尝试运行时,批处理失败 .

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

线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / hadoop / conf /在java.lang.Class.privateGetDeclaredMethods(Class.java:2570)的java.lang.Class.getDeclaredMethods0(Native Method)中的配置java.lang.Class.getMethod0(Class.java:2813)位于sun.launcher.LauncherHelper的sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)的java.lang.Class.getMethod(Class.java:1663) .checkAndLoadMain(LauncherHelper.java:486)引起:java.net.URLClassLoader $ 1的java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)中的java.lang.ClassNotFoundException:org.apache.hadoop.conf.Configuration .run(URLClassLoader.java:355)java.security.AccessController.doPrivileged(Native Method),java.net.URLClassLoader.findClass(URLClassLoader.java:354),位于java.lang.ClassLoader.loadClass(ClassLoader.java:425) )at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)at java.lang.ClassLoader.loadClass(ClassLoader.java:358)... 6更多

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

  • sudo -u hdfs spark-submit --class Hashtags --master yarn --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 *

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

一切都很完美 .

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

  • spark-submit提供以下内容:

org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher:启动容器容器的命令_1486926591393
02_000001:LD_LIBRARY_PATH =“/ usr / lib / hadoop / lib / native:$ LD_LIBRARY_PATH”,{
} / bin / java ,-server,-Xmx1024m,-Djava.io.tmpdir = {} / TMP,-Dspark.yarn.app.container.log.dir =, - XX:MaxPermSize参数= 256M,org.apache.spark.deploy .yarn.ApplicationMaster, - 类, '主题标签', - jar ,文件:/home/cloudera/spring-batch-spark/app/spark-hashtags_2.10-0.1.0.jar, - 精氨酸,'/ TMP /#标签/输入/ tweets.dat”, - 精氨酸, '/ TMP /#标签/输出', - 执行存储器,1024米, - Actuator 型磁芯,1, - 属性文件,{ } /spark_conf/spark_conf.properties,1>,/标准输出,2>,/标准错误

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

org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher:启动容器容器的命令_1486833100526

01_000001:{} / bin / java,-server,-Xmx1024m,-Djava.io.tmpdir = { } /tmp,-Dspark.yarn.app.container.log.dir =, - XX:MaxPermSize参数= 256M,org.apache.spark.deploy.yarn.ApplicationMaster, - 类, '主题标签', - jar ,文件:/home/cloudera/spring-batch-spark/app/spark-hashtags_2.10-0.1.0.jar,--arg,'hdfs://quickstart.cloudera:8020 /演示/#标签/输入/ tweets.dat ”, - 精氨酸, 'HDFS://quickstart.cloudera:8020 /演示/#标签/输出', - 执行存储器,1024米, - Actuator 型磁芯,1, - 属性文件,{ } /spark_conf/spark_conf.properties,1>,/标准输出,2>,/标准错误

As you can see spark-submit adds LD_LIBRARY_PATH while Spring Batch's tasklet doesn't 并且因为它似乎是唯一不同的东西我认为问题存在 .

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

感谢大家 . 圭多

1 回答

  • 0

    感谢您的详细比较 . 我不认为LD_LIBRARY_PATH会导致此特定错误,我想知道 --arg 值的差异是否有任何影响 . 对于spark-submit示例,您使用 /tmp vs hdfs://quickstart.cloudera:8020/demo/ 作为spring-hadoop one . 你可以试试带有 hdfs://quickstart.cloudera:8020/demo/ 前缀的spark-submit吗?

    更新:看起来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上运行良好 .

相关问题