我正在尝试升级一个用scala编写的spark项目,从spark1.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 app master的web界面(既然有工作,我知道它至少做到了这一点),它显示的日志只有以下几条:
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}}
一个文字(包括括号)以某种方式使它成为一个脚本?这是来自工作节点还是驱动程序?我能做些什么来试验和排除故障?
我确实有 JAVA_HOME
在集群的所有节点上的hadoop配置文件中设置:
% 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邮件列表上发布的,如果/当我找到解决方案时,我会更新这两个位置。]
3条答案
按热度按时间bmvo0sr51#
好吧,我让办公室里的其他人来帮忙,我们想出了一个解决办法。我不确定这在多大程度上取决于centos上hortonworks hdp 2.0.6的文件布局,这正是我们在集群上运行的。
我们手动将一些目录从一台集群机器(或任何可以成功使用hadoop客户机的机器)复制到您的本地机器。我们叫那台机器吧
$GOOD
.设置hadoop配置文件:
设置hadoop库和可执行文件:
设置spark库和可执行文件:
设置一些环境变量:
现在,各种Spark壳可以这样运行:
一些评论:
这个
JAVA_HOME
设置是一样的,我一直以来-只是包括在这里完成。所有的注意力都集中在JAVA_HOME
原来是一条红鲱鱼。这个
--driver-java-options=-Dorg.xerial.snappy.lib.name=libsnappyjava.jnilib
是必要的,因为我在java.lang.UnsatisfiedLinkError: no snappyjava in java.library.path
. 这个jnilib
文件是OSX的正确选择。这个
--conf spark.yarn.jar
piece只是为了节省时间,避免每次启动shell或提交作业时都将程序集文件重新复制到集群中。cngwdvgl2#
您是否尝试过在etc/hadoop/yarn-env.sh文件中设置java\u home?运行作业的yarn容器可能无法使用java\u home环境变量。
我以前也遇到过这样的情况,即节点上的.bashrc中的某些env变量没有被集群上生成的yarn worker读取。
该错误可能与版本升级无关,但与环境配置有关。
omvjsjqw3#
首先,我建议您转到Java7。然而,这不是你正在寻找或需要帮助。
对于设置javau home,我建议您在bashrc中设置它,而不是在多个文件中设置。此外,我建议您安装java,使用/usr/bin的替代品。