Spark on Yarn
Spark on Yarn
1. Spark on Yarn模式优点
与其他计算框架共享集群资源(eg.Spark框架与MapReduce框架同时运行,如果不用Yarn进行资源分配,MapReduce分到的内存资源会很少,效率低下);资源按需分配,进而提高集群资源利用率等。
相较于Spark自带的Standalone模式,Yarn的资源分配更加细致
Application部署简化,例如Spark,Storm等多种框架的应用由客户端提交后,由Yarn负责资源的管理和调度,利用Container作为资源隔离的单位,以它为单位去使用内存,cpu等。
Yarn通过队列的方式,管理同时运行在Yarn集群中的多个服务,可根据不同类型的应用程序负载情况,调整对应的资源使用量,实现资源弹性管理。
2. Yarn框架基本原理
2.1 名词解释(简述)
Client作为提交分布式程序的客户端,上传资源文件和JAR包到HDFS提供集群使用一般是client实现的。客户端除了可以直接从RM得到App Master的消息,得到作业的运行情况外,还可以直接与App
Master沟通。
ResourceManager负责将集群的资源分配给各个应用使用。
Container作为资源分配和调度的基本单位,其中封装了的资源如内存,CPU,磁盘,网络带宽等。每个任务会被分配一个Container,并在该Container中执行且只能使用其封装的资源。
NodeManager作为计算节点,负责启动Container,同时通过心跳不断的和RM沟通,描述该Worker节点的资源( CPU,内存,硬盘和网络带宽等)状况。
AppMaster 对应客户端提交的一个应用,客户端每提交一个应用,RM会在Worker节点上给它分配一个全局唯一的App master,App master可以在任何一台Worker节点上启动,负责管理作业的整个生命周期,包括通知NM创建Container,管理Container等。
Yarn可以在History Server中查看运行了那些作业,在Hadoop未来版本中还可以通过Histort Server中了解App Master的工作(调度)细节(eg.使用哪台机器上的CPU,内存,处理了什么数据等)。
2.2 工作流程(简述)
1. RM收到客户端的请求后,会在全局查看资源,如果哪台Worker适合,其上运行的NM就为该作业生成container实例,生成的第一个Container实例,里面运行的就是App Master,App
Master运行成功的时候要向RM进行注册。
2. App Master向RM申请资源(eg.10个Container),得到消息反馈后,控制NM启动Container并运行任务,Container启动后直接对App Master负责(作业的调度中心是App
Master,极大的减轻的RM的负担)。
Tip:如果没有足够的container可以被申请,则会进行等待其他作业完成任务,空出Container后进行分配。
3.App Master监控容器上任务的执行情况,反馈在作业的执行状态信息和完成状态。
3. Spark on Yarn框架
Spark on Yarn框架图
Yarn提到的App Master可以理解为Spark中Standalone模式中的driver。
Container中运行着Executor,在Executor中以多线程并行的方式运行Task。
工作流程大体与Yarn相同。
4. 部署和使用
4.1配置
使用该模式的时候,需修改$SPARK_HOME/conf/spark-env文件,在文件中加入HADOOP_CONF_DIR 或者 YARN_CONF_DIR路径指向含有客户端配置文件的目录。这些配置会被写入分布式文件系统,YARNResourceManager会链接它们。
//HADOOP目录
export HADOOP_HOME=/usr/local/hadoop
//HADOOP下配置文件目录
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
4.2用yarn 运行Spark应用
Sparkon Yarn 模式又分为Yarn-Cluster模式和Yarn-Client模式。
Spark-Cluster模式中,driver程序会在application master进程中运行,客户端程序可以在应用初始化后脱离。Spark-Client模式中,driver运行在client进程中,client一般不是集群中的机器。applicationmaster仅用于向YARN请求资源。调试时一般使用yarn-client模式,便于任务进行过程和结果(log)的查看。
4.2.1 yarn-cluster
在yarn-cluster模式下启动Spark Application
列出一些常用的参数:
num-executors是executor的数量
driver-memory 是为driver分配的内存
executor-memory 是每个executor使用的内存
executor-cores 是每个executor分配的CPU
示例:
结果:
可以去ResourceManager的web ui 默认端口8088中查看结果,也可以直接去Worker节点的log下查看。
4.2.2 yarn-client
使用方式除了--master 参数改为yarn-client外,其他基本与yarn-cluster相同
执行过程和结果都会在控制台打印出来,这是因为driver运行在客户端中:
4.3 调试
提交任务后,可以在Yarn的ResourceManager对应的Web UI(默认端口为8088)中查看该Application的状态和对应的日志。
Executors和app master都运行在container中。应用完成运行后,YARN有两种处理container日志的模式:
1.如果开启了日志聚合(通过yarn.log-aggregation-enable配置),container的日志会复制到HDFS中并且删除机器上的本地日志。这样可以通过”yarn logs”命令在集群中的任意地方进行查看。
yarn logs -applicationId <app ID>
运行上述命令会打印出指定应用所有container的日志内容。
2.如果日志聚合是关闭的,日志会保存在每一台机器的目录YARN_APP_LOGS_DIR下,通常配置为$HADOOP_HOME/logs/userlogs。查看某个container的日志需要在对应主机的那些目录下进行。子目录会根据Application ID以及Container
ID来确定。
5. Sparn on Yarn 属性列表
|
属性名 |
默认值 |
说明 |
|
spark.yarn.applicationMaster.waitTries |
10 |
ApplicationMaster容许SparkContext初始化失败的最大次数 |
|
spark.yarn.submit.file.replication |
3 |
Spark和APP的JAR文件以及其他分布式存储的文件、 压缩包上传到HDFS中的副本数量 |
|
spark.yarn.preserve.staging.files |
false |
设置是否在本次Job运行完成后 删除使用到的文件(Spark和App的jar文件等) |
|
spark.yarn.scheduler.heartbeat.interval-ms |
5000 |
Spark application master向YARN心跳汇报的间隔 |
|
spark.yarn.max.executor.failures |
2*executor数量,最小为3 |
在Application失败前,executor的最大失败次数 |
|
spark.yarn.historyServer. address |
none |
Spark历史任务的地址(例如:host.com:18080),不要 包含协议头(http://)。 当Spark应用执行执行完成时,YARN ResourceManager 可以通过这个地址将ResourceManager UI和 Spark 历史任务 UI链接。 |
|
spark.yarn.dist.archives |
none |
将要解压到每个executor工作目录下的压缩包用逗号分隔。 |
|
spark.yarn.dist.files |
none |
将要放置在每个executor工作目录下的文件用逗号分隔 |
|
spark.yarn.executor.memoryOverhead |
384 |
每个executor可以分配的非堆存储(off-heap)内存, 这些内存用于如VM, 字符串常量池以及其他本地额外开销等。 |
|
spark.yarn.driver.memoryOverhead |
384 |
每个driver可以分配的非堆存储(off-heap)内存, 这些内存用于如VM, 字符串常量池以及其他本地额外开销等。 |
|
spark.yarn.jar |
none |
修改读取spark jar的地址, Spark on Yarn默认使用安装在本地的Spark jar文件, 但是该文件也可以放在HDFS上任意可以访问到的位置。 YARN可以将他缓存在节点上, 这样就不必在应用每次运行时再分发。 用法:可以通过”hdfs:///some/path”来指定HDFS上的jar文件。 |
|
spark.yarn.access.namenodes |
none |
你的Spark Application将要去连接的一个安全的 HDFS nameNodes列表。例如: `spark.yarn.access.namenodes= hdfs://nn1.com:8032,hdfs://nn2.com:8032`。 Spark Application首先要能访问访问该列表中 指定的namenode,Spark获取到每个namenode的安全令牌, 这样Spark Application就能访问那些远程的HDFS集群。 |
|
spark.yarn.appMasterEnv. [EnvironmentVariableName] |
none |
将环境变量通过EnvironmentVariableName添加到YARN上启 动的Application Master进程。 用户可以指定多个这样的配置来设置多个环境变量。 在yarn-cluster模式中控制Spark driver的环境变量, 在yarn-client模式中只能控制executor启动的环境变量。 |
6. 注意事项
Hadoop2.2之前,YARN不支持为container资源分配核心数。
Sparkexecutor使用的本地目录由YARN的配置确定(Hadoop YARN配置yarn.nodemanager.local-dirs)。即使用户在spark配置文件中指定了spark.local.dir也会被忽略。
在yarn-cluster模式下,如果你使用本地文件,参数选项--jars能使代码中的SparkContext.addJar的功能生效。如果使用的是HDFS,HTPP,HTTPS或FTP文件则不需要--jars参数。
Spark on Yarn的更多相关文章
- Spark on YARN的部署
Spark on YARN的原理就是依靠yarn来调度Spark,比默认的Spark运行模式性能要好的多,前提是首先部署好hadoop HDFS并且运行在yarn上,然后就可以开始部署spark on ...
- 配置Spark on YARN集群内存
参考原文:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 运行文件有几个G大,默 ...
- Spark on Yarn 学习(一)
最近看到明风的关于数据挖掘平台下实用Spark和Yarn来做推荐的PPT,感觉很赞,现在基于大数据和快速计算方面技术的发展很快,随着Apache基金会上发布的一个个项目,感觉真的新技术将会不断出现在大 ...
- Spark on Yarn:任务提交参数配置
当在YARN上运行Spark作业,每个Spark executor作为一个YARN容器运行.Spark可以使得多个Tasks在同一个容器里面运行. 以下参数配置为例子: spark-submit -- ...
- 运行 Spark on YARN
运行 Spark on YARN Spark 0.6.0 以上的版本添加了在yarn上执行spark application的功能支持,并在之后的版本中持续的 改进.关于本文的内容是翻译官网的内容,大 ...
- Spark On YARN使用时上传jar包过多导致磁盘空间不够。。。
今天测试过程中发现YARN Node变成Unhealthy了,后来定位到硬盘空间不够..... 通过查找大于100M的文件时发现有N多个spark-assembly-1.4.0-SNAPSHOT-ha ...
- Spark on YARN两种运行模式介绍
本文出自:Spark on YARN两种运行模式介绍http://www.aboutyun.com/thread-12294-1-1.html(出处: about云开发) 问题导读 1.Spark ...
- Spark源码系列(七)Spark on yarn具体实现
本来不打算写的了,但是真的是闲来无事,整天看美剧也没啥意思.这一章打算讲一下Spark on yarn的实现,1.0.0里面已经是一个stable的版本了,可是1.0.1也出来了,离1.0.0发布才一 ...
- Apache Spark源码走读之8 -- Spark on Yarn
欢迎转载,转载请注明出处,徽沪一郎. 概要 Hadoop2中的Yarn是一个分布式计算资源的管理平台,由于其有极好的模型抽象,非常有可能成为分布式计算资源管理的事实标准.其主要职责将是分布式计算集群的 ...
随机推荐
- windbg sos版本不匹配问题解决
dumpheap 时提示: 0:105> !dumpheap -stat The garbage collector data structures are not in a valid sta ...
- jQuery 遍历json数组的实现代码
<script type="text/javascript"> "}]; $(d1).each(function(){ alert(this.text+&qu ...
- Cupid's Arrow---hdu1756(判断点与多边形的位置关系 模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1756 题意:中文题,套模板即可: /* 射线法:判断一个点是在多边形内部,边上还是在外部,时间复杂度为 ...
- JMeter学习-012-JMeter 配置元件之-HTTP Cookie管理器-实现 Cookie 登录
前文我们讲过了若何获取登录后的 Cookie 信息,不知如何获取登录 Cookie 的朋友,敬请参阅我之前写的博文:Fiddler-005-获取 Cookie 信息.参阅上篇文章,获取到 Cookie ...
- JS-010-覆盖率测试工具 JSCoverage 初识
在日常的 js 脚本语言开发过程中,在开发攻城狮进行日常的单元测试和测试攻城狮日常的测试过程中,js 代码的覆盖率是白盒测试的一个重要的考量标准.前些天,在无意中看到了一个 js 覆盖率测试统计工具 ...
- imx6dl i2c4 support
imx6dl i2c4 support 最近的项目用到了imx6dl的i2c4,其实完全可以用gpio-i2c的方法来实现.既然imx6的datasheet中提到有4个i2c,那么一定可以生成i2c的 ...
- [BS] 小知识点总结-02
1. dispatch_GCD 可让某操作延迟x秒执行 //模拟网速慢,延迟3s返回数据(就会导致右侧数据和左侧标签不对应) dispatch_after(dispatch_time(DISPATC ...
- HBase环境搭建
HBase与Hadoop对应关系:http://hbase.apache.org/book.html#basic.prerequisites 4.1. Hadoop 这块介绍了对应关系 HBase ...
- 转:CDC,CPaintDC,CClientDC,CWindowDC区别
http://www.cnblogs.com/songsu/articles/1350014.html
- tomcat 6.0.44 “has failed to stop it. This is very likely to create a memory leak” 问题调查
1. 问题起因 我们项目中缓存模块某个实现采用了ehcache(2.4.3),当项目部署到tomcat中后,对tomcat做停止服务操作(点击eclipse的console红色的停止按钮,奇怪的是有小 ...