Running Spark on YARN

对 YARN (Hadoop NextGen) 的支持是从Spark-0.6.0开始的,后续的版本也一直持续在改进。

Launching Spark on YARN

确保HADOOP_CONF_DIR或YARN_CONF_DIR指向包含Hadoop集群的(客户端)配置文件的目录。这些配置用于写入HDFS并连接到YARN ResourceManager。此目录中包含的配置将分发到YARN群集,以便应用程序使用的所有容器都使用相同的配置。如果配置引用了不受YARN管理的Java系统属性或环境变量,那么也应该在Spark应用程序的配置(驱动程序,执行程序和AM在客户端模式下运行时)中进行设置。

有两种可用于在YARN上启动Spark应用程序的部署模式。在cluster模式下,Spark驱动程序在由集群上的YARN管理的应用程序主进程中运行,客户端可以在启动应用程序后结束。在client 模式下,驱动程序在客户端进程中运行,应用程序主程序仅用于从YARN请求资源。

不同于Spark独立和Mesos模式,其中master地址在--master参数中指定,在YARN模式下,ResourceManager的地址从Hadoop配置中提取。因此,--master参数是yarn。

要在cluster模式下启动Spark应用程序:

$ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] <app jar> [app options]
$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores \
--queue thequeue \
lib/spark-examples*.jar \

以上启动一个启动默认应用程序主服务器的YARN客户端程序。那么SparkPi将作为Application Master的子线程运行。客户端将定期轮询应用程序主机的状态更新并将其显示在控制台中。您的应用程序运行完毕后,客户端将退出。有关如何查看驱动程序和执行程序日志,请参阅下面的“调试应用程序”部分。

要在客户端模式下启动Spark应用程序,请执行相同操作,但将cluster 替换为client。以下显示如何在客户端模式下运行spark-shell:

$ ./bin/spark-shell --master yarn --deploy-mode client

 

 

Adding Other JARs

在cluster模式下,驱动程序在与客户机不同的机器上运行,因此SparkContext.addJar将不会与客户端本地的文件一起使用。要使客户端上的文件可用于SparkContext.addJar,请在启动命令中使用--jars选项包含它们。

$ ./bin/spark-submit --class my.main.Class \
--master yarn \
--deploy-mode cluster \
--jars my-other-jar.jar,my-other-other-jar.jar \
my-main-jar.jar \
app_arg1 app_arg2

准备

在YARN上运行Spark需要使用构建分发支持YARN的Spark的二进制。二进制分发可以从项目网站的downloads page 下载。要自己构建Spark,请参阅构建Building Spark

要使Spark运行时jar可以从YARN端访问,可以指定spark.yarn.archive或spark.yarn.jars。有关详细信息,请参阅Spark Properties。如果没有指定spark.yarn.archive或spark.yarn.jars,Spark将在$ SPARK_HOME / jars下创建一个包含所有jar的zip文件,并将其上传到分布式缓存。

Spark的YARN上的大部分配置与其他部署模式相同。有关这些信息的详细信息,请参阅配置页面。这些是特定于YARN上Spark的配置。

调试应用

在YARN术语中,执行者和应用程序主人在“containers”内部运行。应用程序完成后,YARN有两种处理容器日志的方式。如果日志聚合已打开(使用yarn.log-aggregation-enable config),容器日志将复制到HDFS并在本地计算机上删除。可以使用yarn日志命令从群集上的任何位置查看这些日志。

yarn logs -applicationId <app ID>

将从给定的应用程序中打印出来自所有容器的所有日志文件的内容。您还可以使用HDFS shell或API直接在HDFS中查看容器日志文件。可以通过查看YARN配置(yarn.nodemanager.remote-app-log-dir和yarn.nodemanager.remote-app-log-dir-suffix)找到它们所在的目录。日志也可在Spark Web UI的“执行程序”选项卡下使用。您需要同时运行Spark历史记录服务器和MapReduce历史记录服务器,并正确地在yarn-site.xml中配置yarn.log.server.url。Spark历史记录服务器UI上的日志URL将重定向到MapReduce历史记录服务器以显示聚合日志

Important notes

核心请求是否符合调度决策取决于正在使用及配置哪个调度程序。

在cluster模式下,Spark执行程序和Spark驱动程序使用的本地目录将是为YARN(Hadoop YARN config yarn.nodemanager.local-dirs)配置的本地目录。如果用户指定了spark.local.dir,它将被忽略。在client模式下,Spark-executors将使用为YARN配置的本地目录,而Spark-driver将使用在spark.local.dir中定义的目录。这是因为Spark驱动程序在client模式下不会提交到YARN群集上,只有Spark执行程序才提交。

--files和--archives选项支持通过#指定HADOOP中文件名。例如指定 --files localtest.txt#appSees.txt。这将把您本地名为localtest.txt的文件上传到HDFS,但是这将通过名称appSees.txt链接,您的应用程序应该使用appSees.txt名称在YARN上运行时引用它。

如果您使用本地文件并以cluster模式运行,则--jars选项允许SparkContext.addJar函数正常工作。如果您使用HDFS,HTTP,HTTPS或FTP文件,则不需要使用它。

Running in a Secure Cluster

正如security一章所涵盖的那样,Kerberos用于在安全的Hadoop集群中验证服务和客户端相关联的主体。这允许客户端提出这些认证服务的请求;授予授权人员的权利的服务。

Hadoop服务问题hadoop令牌允许访问服务和数据。客户端必须首先获取他们将访问的服务的tokens,并将其与应用一起传递到YARN。

对于Spark应用程序与任何Hadoop文件系统(例如hdfs,webhdfs等),HBase和Hive进行交互,它必须使用启动应用程序的用户的Kerberos凭据来获取相关的令牌,也就是说,以身份的主体将运行的Spark应用程序。

这通常在启动时完成:在安全集群中,Spark将自动获取集群的默认Hadoop文件系统的令牌,并可能为HBase和Hive获取令牌。

Running Spark on YARN的更多相关文章

  1. spark第四篇:Running Spark on YARN

    确保HADOOP_CONF_DIR或者YARN_CONF_DIR指向hadoop集群配置文件目录.这些配置用来写数据到hdfs以及连接yarn ResourceManager.(在$SPARK_HOM ...

  2. Spark记录-源码编译spark2.2.0(结合Hive on Spark/Hive on MR2/Spark on Yarn)

    #spark2.2.0源码编译 #组件:mvn-3.3.9 jdk-1.8 #wget http://mirror.bit.edu.cn/apache/spark/spark-2.2.0/spark- ...

  3. 运行 Spark on YARN

    运行 Spark on YARN Spark 0.6.0 以上的版本添加了在yarn上执行spark application的功能支持,并在之后的版本中持续的 改进.关于本文的内容是翻译官网的内容,大 ...

  4. Spark源码系列(七)Spark on yarn具体实现

    本来不打算写的了,但是真的是闲来无事,整天看美剧也没啥意思.这一章打算讲一下Spark on yarn的实现,1.0.0里面已经是一个stable的版本了,可是1.0.1也出来了,离1.0.0发布才一 ...

  5. 【原】Spark on YARN

    在YARN上运行Spark 在Spark0.6.0版本开始支持YARN模式,随后的版本在逐渐地完善. 在YARN上启动Spark 确保HADOOP_CONF_DIR或YARN_CONF_DIR属性的值 ...

  6. Spark On YARN内存分配

    本文转自:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 此文解决了Spark ...

  7. 【原创】大数据基础之Spark(2)Spark on Yarn:container memory allocation容器内存分配

    spark 2.1.1 最近spark任务(spark on yarn)有一个报错 Diagnostics: Container [pid=5901,containerID=container_154 ...

  8. spark on yarn 内存分配

    Spark On YARN内存分配 本文主要了解Spark On YARN部署模式下的内存分配情况,因为没有深入研究Spark的源代码,所以只能根据日志去看相关的源代码,从而了解“为什么会这样,为什么 ...

  9. Spark记录-Spark On YARN内存分配(转载)

    Spark On YARN内存分配(转载) 说明 按照Spark应用程序中的driver分布方式不同,Spark on YARN有两种模式: yarn-client模式.yarn-cluster模式. ...

随机推荐

  1. OC

    一,字符串 1创建一个字符串 1) NSString *str2=[[NSString alloc]initWithString:str1]; 2)  NSString *string2=[[NSSt ...

  2. jmeter系列------参数关联

    接口请求中的一个变量需要用上一个接口道服务器返回响应的动态值(上个请求). 遇到这样的情况,我们就需要用到关联 例如用户A发表了一个一条微信朋友圈,用户B想对这条朋友圈进行评论,就需要先获取到这个朋友 ...

  3. robot framework 牛刀一试

    1.New Project   Type选择Directory,Format选择TXT 2.New Suite   在Project的基础上Create New Suite,Type选择File,Fo ...

  4. Jmeter之Bean shell学习(一)

    一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...

  5. Android studio 安装的安装一些问题

    在国内如何更新android sdk? 由于众所周知的某些原因,我们无法直接连接android sdk的更新服务更新sdk,所以可以通过国内的ftp站点把常用的sdk组件如android platfo ...

  6. 10分钟学会ES7+ES8

    撰文为何 身为一个前端开发者,ECMAScript(以下简称ES)早已广泛应用在我们的工作当中.了解ECMA机构流程的人应该知道,标准委员会会在每年的6月份正式发布一次规范的修订,而这次的发布也将作为 ...

  7. RMI和socket详解

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp58   一般来说,基于CS(client-server)软件架构的开发技 ...

  8. 遇到的一些Jquery函数

     jQuery.extend()        jQuery.merge():函数用于合并两个数组内容到第一个数组. <script> $(function () { ,,], [,,] ...

  9. NPOI导Excel样式设置(转)

    一.创建一个Excel //创建一个工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); //创建一个页 ISheet sheet = workbook.Cr ...

  10. jQuery常用工具方法

    前面的话 jQuery提供一些与元素无关的工具方法,不必选中元素,就可以直接使用这些方法.如果理解原生javascript的继承原理,那么就能理解工具方法的实质.它是定义在jQuery构造函数上的方法 ...