将Yarn簇配置添加到spark应用程序

luaexgnf  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(381)

我尝试在scala sbt应用程序中使用spark-on-warn,而不是使用 spark-submit 直接。
我已经有一个远程Yarn集群运行,我可以连接到Yarn集群运行Spark作业在斯巴克。但当我尝试在scala应用程序中执行类似操作时,它无法将环境变量加载到Yarn配置中,而是使用默认的Yarn地址和端口。
sbt应用程序只是一个简单的对象:

object simpleSparkApp {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setAppName("simpleSparkApp")
      .setMaster("yarn-client")
      .set("SPARK_HOME", "/opt/spark-1.5.1-bin-hadoop2.6")
      .set("HADOOP_HOME", "/opt/hadoop-2.6.0")
      .set("HADOOP_CONF_DIR", "/opt/hadoop-2.6.0/etc/hadoop")
    val sc = new SparkContext(conf)
  }
}

当我在intellij idea中运行此应用程序时,日志显示:

15/11/15 18:46:05 INFO RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
15/11/15 18:46:06 INFO Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
15/11/15 18:46:07 INFO Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
...

似乎环境添加不正确,因为 0.0.0.0 不是远程Yarn资源管理器节点和我的 spark-env.sh 有:

export JAVA_HOME="/usr/lib/jvm/ibm-java-x86_64-80"
export HADOOP_HOME="/opt/hadoop-2.6.0"
export HADOOP_CONF_DIR="$HADOOP_HOME/etc/hadoop"
export SPARK_MASTER_IP="master"

还有我的 yarn-site.xml 有:

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
</property>

如何将Yarn簇配置的环境变量正确添加到此sbt spark应用程序中?
额外信息:
我的系统是ubuntu14.04,可以连接到Yarn簇的sparkr代码如下所示:

Sys.setenv(HADOOP_HOME = "/opt/hadoop-2.6.0")
Sys.setenv(SPARK_HOME = "/opt/spark-1.4.1-bin-hadoop2.6")
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths()))
library(SparkR)
sc <- sparkR.init(master = "yarn-client")
e4yzc0pl

e4yzc0pl1#

现在,没有现成的解决方案来避免Yarn模式的使用。
spark submit:要运行作业,spark submit在已配置的环境(或未按您的情况配置)上运行org.apache.spark.deploy.yarn.client代码。以下是执行任务提交的客户端:https://github.com/apache/spark/blob/master/yarn/src/main/scala/org/apache/spark/deploy/yarn/client.scala
怎么解决呢?
这里有一个覆盖客户端行为的选项http://blog.sequenceiq.com/blog/2014/08/22/spark-submit-in-java/ 因此,您可以添加一个额外的env变量等。后来spark将yarn客户机私有化到spark包中(~ 2014年底)。因此,如果将您的包命名为org.apache.spark-可能是一个选项。。
spark提交解决方案的构建(及其优缺点)如下所述:http://www.henningpetersen.com/post/22/running-apache-spark-jobs-from-applications
sparkr.r呢,它在内部使用spark sumbit:https://github.com/apache/spark/blob/master/r/pkg/r/sparkr.r 当它从调用launchbackend()时https://github.com/apache/spark/blob/master/r/pkg/r/client.r 并给出所有环境集合+参数

相关问题