Spring for Hadoop : issues with batch-spark sample on CDH 5. 8

标签 spring hadoop cloudera-cdh

我正在尝试运行

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 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
  • 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: 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


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

  • 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/

    相关文章:

    hadoop - 无法使用配置单元(CDH 5.9.0)查询结构字段

    hadoop - 无法通过Map Reduce Java程序访问Hadoop HDFS文件系统

    java - 在注释中注入(inject) Spring 属性列表

    xml - 支持 XML 的 Spring Boot REST

    hadoop - 多节点hadoop集群安装

    java - hadoop和Java安装

    javascript - 如何使用 Spring 响应下载 excel 文件

    java - 为什么 Spring 数据(JPA)的删除方法没有返回值?

    hadoop - 可以只安装 Hadoop HDFS 吗?

    hadoop - Impala - 替换表分区中的所有数据