【Spark】----Spark on Yarn

最近从Hadoop 1.x 转到Hadoop 2.x 同时将一些java 程序转为Scala的程序将平台上的代码减小了不少,在实施的过程当中,开到一些Spark相关的YARN的部署上都是基于以前的Hadoop 1.x的部分方式,在Hadoop2.2 +版本之上 基本上就不用这么部署了。其缘由就是Hadoop YARN 统一资源管理。java

在Spark官网上浏览器

Spark应用在集群上以独立的进程集合运行,在你的主程序(称为驱动程序)中以SparkContext对象来调节。 特别的,为了在集群上运行,
SparkContext能够与几个类型的集群管理器(Spark自身单独的集群管理器或者Mesos/YARN)相链接,这些集群管理器能够在应用间分配资源。一旦链接,Spark须要在集群上的线程池子节点,也就是那些执行计算和存储应用数据的工做进程。而后,它将把你的应用代码(以JAR或者Python定义的文件并传送到SparkContext)发送到线程池。最后,SparkContext发送任务让线程池运行。(因此是经过SparkContext发送到其余节点的,在此你只是须要获得SparkContext,就行啦)。
 
 
关于这个架构有几个游泳的地方须要注意:
 
1.各个应用有本身的线程池进程,会在整个应用的运行过程当中保持并在多个线程中运行任务。这样作的好处是把应用相互孤立,即在调度方面(各个驱动调度它本身的任务)也在执行方面(不一样应用的任务在不一样的JVM上运行)。然而,这也意味着若不把数据写到额外的存储系统的话,数据就没法在不一样的Spark应用间(SparkContext的实例)共享。
 
2.对于潜在的集群管理器来讲,Spark是不可知的。只要它须要线程池的进程和他们间的通讯,那么即便是在也支持其余应用的集群管理器(例如,Mesos/YARN)上运行也相对简单。
 
3. 由于驱动在集群上调度任务,它应该运行接近到工做节点,在相同的局域网内更好。若是你想对远程的集群发送请求,较好的选择是为驱动打开一个RPC,让它就近提交操做而不是运行离工做节点很远的驱动。
 
 
 
集群管理类型
 
系统目前支持3中集群管理:
(1)单例模式 一种简单的集群管理,其包括一个很容易搭建集群的Spark
(2) Apache Mesos模式 一种通用的集群管理,能够运行Hadoop MapReduce和服务应用的模式
(3) Hadoop YARN模式 Hadoop 2.0 中的资源管理模式
 
其实,在Amazon EC2(亚马逊弹性计算云)中Spark的EC2启动脚本能够很容易的启动单例模式。
 
给集群发布代码
 
给集群发布代码的一种推荐的方式是经过SparkContext的构造器,这个构造器能够给工做节点生成JAR文件列表(Java/Scala)或者.egg文件和.zip包文件(Python)。你也能够执行SparkContext.addJar和addFile来动态的建立发送文件。
 
 
监控器
 
每一个驱动程序有一个Web UI,典型的是在4040端口,你能够看到有关运行的任务,程序和存储空间大小等信息。你能够在浏览器中输入简单的URL方式来访问:http://<驱动节点>::4040.监控器也能够指导描述其它监控信息。(若是你使用的Spark YARN 模式的,只有运行Spark才能看到UI页面,你中止了,log数据就没了,但你能够将log持久化)。
 
任务调度
 
Spark能够经过在应用外(集群管理水平)和应用里(若是在同一个SparkContext中有多个计算指令)资源分配。
相关文章
相关标签/搜索