将Yarn集群配置添加到Spark应用程序

Bam*_*mqf 6 hadoop scala hadoop-yarn apache-spark

我试图在scala sbt应用程序中使用spark而不是spark-submit直接使用.

我已经有一个远程纱线集群正在运行,我可以连接到SparkR中的纱线集群运行火花作业.但是当我尝试在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)
  }
}
Run Code Online (Sandbox Code Playgroud)

当我在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)
...
Run Code Online (Sandbox Code Playgroud)

似乎环境没有正确添加,因为0.0.0.0不是远程纱线资源管理器节点的IP,我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"
Run Code Online (Sandbox Code Playgroud)

yarn-site.xml有:

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
</property>
Run Code Online (Sandbox Code Playgroud)

如何正确地将Yarn群集配置的环境变量添加到此sbt Spark应用程序?

额外的信息:

我的系统是Ubuntu14.04,可以连接到纱线群集的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")
Run Code Online (Sandbox Code Playgroud)

小智 8

目前,没有开箱即用的解决方案可以避免Yarn模式的spark-submit使用.

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

虽然解决方案是什么?

  1. 有一个选项可以覆盖客户端行为,可以在http://blog.sequenceiq.com/blog/2014/08/22/spark-submit-in-java/找到, 以便您可以添加额外的env变量,后来Spark将Yarn客户端私有化为spark包(〜2014年底).所以,如果要命名你的包org.apache.spark - 可能是一个选项..

  2. 这里介绍了火花提交解决方案(有其优点和缺点)的基础:http: //www.henningpetersen.com/post/22/running-apache-spark-jobs-from-applications

什么SparkR.R,它采用火花透过内部: 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 并给出所有已设置的环境+参数