我正在尝试运行
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
我修复了与以下相关的所有版本:
我能够构建项目,在 CDH 5.8 quickstart 的 VM 上上传构建的工件,但是在尝试运行时,批处理失败。
检查 Cloudera Manager 上的日志时,我看到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2570) at java.lang.Class.getMethod0(Class.java:2813) at java.lang.Class.getMethod(Class.java:1663) at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at 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 more
我尝试通过以下命令提交 Spark Job
(模拟 hdfs 脚本手动准备输入和输出文件夹)
一切都很完美。
我能够检查资源管理器的日志,以找到 Spring Batch 的 tasklet 生成的启动命令和 spark-submit 命令之间的任何区别,我发现:
org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher: Command to launch container container_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,-Dspark.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.1.0.jar,--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
org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher: Command to launch container container_1486833100526_0006_01_000001 : {{JAVA_HOME}}/bin/java,-server,-Xmx1024m,-Djava.io.tmpdir={{PWD}}/tmp,-Dspark.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.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_PATH 而 Spring Batch 的 tasklet 没有 而且因为这似乎是我认为问题存在的唯一不同之处。
由于我对该主题的了解不足,我无法理解幕后发生的事情。
你们中有人遇到过这个问题吗?
谢谢大家。
圭多
最佳答案
感谢您的详细比较。我认为 LD_LIBRARY_PATH 不会导致此特定错误,我想知道 --arg
中的差异是否值有任何影响。对于您使用的 spark-submit 示例 /tmp
对比 hdfs://quickstart.cloudera:8020/demo/
对于 spring-hadoop 之一。你能用 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 上运行良好。
关于Spring for Hadoop : issues with batch-spark sample on CDH 5. 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42179476/