升级到Spark 1.3.0的JAVA_HOME错误

肯·威廉姆斯

我正在尝试将用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罐子,并提交:

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邮件列表上,如果/找到解决方案,我将同时更新两个地方。]

肯·威廉姆斯

好的,所以我在办公室里有其他人来帮助解决这个问题,我们找到了解决方案。我不确定其中有多少特定于CentOS上Hortonworks HDP 2.0.6的文件布局,这是我们在集群上运行的布局。

我们将某些目录从一台群集计算机(或任何可以成功使用Hadoop客户端的计算机)中手动复制到本地计算机。我们叫那台机器$GOOD

设置Hadoop配置文件:

cd /etc
sudo mkdir hbase hadoop
sudo scp -r $GOOD:/etc/hbase/conf hbase
sudo scp -r $GOOD:/etc/hadoop/conf hadoop

设置Hadoop库和可执行文件:

mkdir ~/my-hadoop
scp -r $GOOD:/usr/lib/hadoop\* ~/my-hadoop
cd /usr/lib
sudo ln –s ~/my-hadoop/* .
path+=(/usr/lib/hadoop*/bin)  # Add to $PATH (this syntax is for zsh)

设置Spark库和可执行文件:

cd ~/Downloads
wget http://apache.mirrors.lucidnetworks.net/spark/spark-1.4.1/spark-1.4.1-bin-without-hadoop.tgz
tar -zxvf spark-1.4.1-bin-without-hadoop.tgz
cd spark-1.4.1-bin-without-hadoop
path+=(`pwd`/bin)
hdfs dfs -copyFromLocal lib/spark-assembly-*.jar /apps/local/

设置一些环境变量:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
export HADOOP_CONF_DIR=/etc/hadoop/conf
export SPARK_DIST_CLASSPATH=$(hadoop --config $HADOOP_CONF_DIR classpath)
`grep 'export HADOOP_LIBEXEC_DIR' $HADOOP_CONF_DIR/yarn-env.sh`
export SPOPTS="--driver-java-options=-Dorg.xerial.snappy.lib.name=libsnappyjava.jnilib"
export SPOPTS="$SPOPTS --conf spark.yarn.jar=hdfs:/apps/local/spark-assembly-1.4.1-hadoop2.2.0.jar"

现在各种火花壳可以像这样运行:

sparkR --master yarn $SPOPTS
spark-shell --master yarn $SPOPTS
pyspark --master yarn $SPOPTS

一些说明:

  • JAVA_HOME设置与我一直以来设置相同-仅在此处包括它以完成操作。JAVA_HOME原来所有的注意力都变成了鲱鱼。
  • --driver-java-options=-Dorg.xerial.snappy.lib.name=libsnappyjava.jnilib之所以必要是因为我遇到了错误java.lang.UnsatisfiedLinkError: no snappyjava in java.library.pathjnilib文件是OS X的正确选择。
  • 这样--conf spark.yarn.jar做只是为了节省时间,避免每次启动外壳程序或提交作业时都将程序集文件复制到群集中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从 SDK 版本 1 升级到 3 后,如何修复 getFederationToken 返回 403 未授权错误

gcloud-java身份验证数据存储区(在0.1.7 / 0.2.0中升级到v1beta3)

Gradle错误升级到Android Studio 3.0 Beta 1

升级到CodeIgniter 3后,“ SQL语法错误”

升级到macOS Big Sur v11.0.1后的JAVA_HOME错误

从Spring Cloud Angel SR3升级到Brixton M1会产生方法未找到错误

将 RxPy 从 1.x 升级到 3.x 后订阅不起作用

Powershell:从v.1升级到v.3

升级到15.10挂在libxfce4ui-1-0

将android studio 1升级到2后出现错误,无法启动

升级到Vue 3后,图像高度重置为0

教义迁移捆绑包:升级到版本3后更新错误

ModuleNotFoundError:升级到python 3时,没有名为“ textencoder”的模块错误

升级到Ruby 2.2后的Rails 3 ActiveRecord #size方法错误

错误:请将您的依赖项升级到core-js @ 3的实际版本

升级到swift3时,出现错误“无法覆盖GKEntity类型的属性”

命令由于信号失败:分段错误:升级到Xcode 8和Swift 3后为11

将 IdentityServer4 v2 升级到 v3 范围错误

WebSVN引发XML错误:升级到SVN 1.8.8后找不到元素(3)

升级到Angular 8后d3.js运行时错误

升级到Angular 8后d3.js中的错误

将Unity3D项目从2019.2.12f1升级到2020.3.1f1后,Visual Studio Project中充斥着CS518错误

如何在GCP Apache Spark Dataproc Cluster上将Apache Hive升级到版本3

升级到python 3.x

从 smarty 2 升级到 3 意外的“|”

如何升级到GCM 3

将项目从Ionic 2升级到Ionic 3后,显示模块“ d3”错误

从Windows 10 Home升级到Pro

从Android Studio'3.2 Canary 16'升级到'3.2 Beta 1'后,数据绑定编译错误