升级到Spark 1.3.0时出现JAVA_HOME错误

时间:2015-03-20 15:33:40

标签: java scala hadoop apache-spark

我正在尝试将用Scala编写的Spark项目从Spark 1.2.1升级到1.3.0,所以我改变了我的build.sbt

-libraryDependencies += "org.apache.spark" %% "spark-core" % "1.2.1" % "provided"
+libraryDependencies += "org.apache.spark" %% "spark-core" % "1.3.0" % "provided"

然后制作一个assembly jar,并提交它:

HADOOP_CONF_DIR=/etc/hadoop/conf \
    spark-submit \
    --driver-class-path=/etc/hbase/conf \
    --conf spark.hadoop.validateOutputSpecs=false \
    --conf spark.yarn.jar=hdfs:/apps/local/spark-assembly-1.3.0-hadoop2.4.0.jar \
    --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
    --deploy-mode=cluster \
    --master=yarn \
    --class=TestObject \
    --num-executors=54 \
    target/scala-2.11/myapp-assembly-1.2.jar

作业无法提交,终端中出现以下异常:

15/03/19 10:30:07 INFO yarn.Client: 
15/03/19 10:20:03 INFO yarn.Client: 
     client token: N/A
     diagnostics: Application application_1420225286501_4698 failed 2 times due to AM 
     Container for appattempt_1420225286501_4698_000002 exited with  exitCode: 127 
     due to: Exception from container-launch: 
org.apache.hadoop.util.Shell$ExitCodeException: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:464)
    at org.apache.hadoop.util.Shell.run(Shell.java:379)
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

最后,我去查看YARN应用程序主人的网络界面(因为工作在那里,我知道它至少使它那么远),它显示的唯一日志是:

    Log Type: stderr
    Log Length: 61
    /bin/bash: {{JAVA_HOME}}/bin/java: No such file or directory

    Log Type: stdout
    Log Length: 0

我不确定如何解释 - 是{{JAVA_HOME}}一个文字(包括括号)以某种方式将其变成一个脚本?这是来自工作者节点还是驱动程序?我可以做任何实验和实验解决?

我在群集的所有节点上的hadoop配置文件中设置了JAVA_HOME

% grep JAVA_HOME /etc/hadoop/conf/*.sh
/etc/hadoop/conf/hadoop-env.sh:export JAVA_HOME=/usr/jdk64/jdk1.6.0_31
/etc/hadoop/conf/yarn-env.sh:export JAVA_HOME=/usr/jdk64/jdk1.6.0_31

自1.2.1以来,此行为是否在1.3.0中发生了变化?使用1.2.1并且不做任何其他更改,作业就完成了。

[注意:我最初在Spark邮件列表上发布了这个,如果/当我找到解决方案时,我会更新这两个地方。]

2 个答案:

答案 0 :(得分:2)

您是否尝试过在etc / hadoop / yarn-env.sh文件中设置JAVA_HOME?您的JAVA_HOME环境变量可能无法用于运行您的作业的YARN容器。

在我之前发生过,节点上的.bashrc中的某些env变量没有被集群中生成的纱线工作者读取。

错误可能与版本升级无关,而是与YARN环境配置相关。

答案 1 :(得分:0)

嗯,首先,我建议您转到Java 7.但是,这不是您正在寻找或需要帮助的地方。

为了设置JAVA_HOME,我建议你在bashrc中设置它,而不是设置多个文件。此外,我建议你安装带有/ usr / bin替代品的java。