集群概述:
(一)组件
spark应用作为一系列独立的进程运行在集群上,通过SparkContext来协调,这个对象一般在我们的main程序里面,通常称为驱动程序,
特别的,为了能够在集群上运行,SparkContext对象支持集成了大多数集群调度比如,Spark自己的standalone ,Hadoop2.x的Yarn
以及Mesos,通过这些调度来管理分配整个程序的资源, 只要能连接上某种集群调度器,spark就会获得每个节点上的executors
我们的程序task就由executors负责计算和存储数据,下一步spark会分发这些代码(jar包,或者Python文件)到我们的executors,最后
SparkContext 会发送task到executors运行。一个拓扑图如下:
一些注意的地方如下:
1,每个应用获取它自己的executor进程,每个task会以多线程的方式运行在executor进程的jvm中,互相之间完全隔离的,但是这也意味着
他们不能再不同的应用(SparkContex)之间共享数据,除非将他们写入一个外在的存储系统
2,集群管理者,能够获取获取executor,并且相互之间通过心跳相互交流
3,驱动程序会连接监听它的executor在整个executor的生命周期之内,所以驱动程序与worker node之间的网络是必须相通的
4,因为驱动程序(SparkContext)调度task在整个集群中,所以它应该与worknode在一个网络拓扑中,当然我们也可以通过远程提交任务,
更好的远程提交方式是通过RPC驱动和提交任务
(二)集群管理类型
当然的spark支持三种集群类型
1,standalone,spark自带最简单快速的一种方式
2,Apache Mesos , 一种通用的资源调度器,可以运行Hadoop MapReduce和其他的一些服务应用
3,Hadoop YARN , hadoop2自带的资源调度器
除此之外,Spark自带的ec2集群脚本,能够非常容易的启动一个standalone集群在亚马逊的EC2上
(三)提交应用程序
应用程序可以被提交任何集群类型,通过使用spark-submit脚本
(四)监听
每个驱动程序有一个web页面,默认是使用4040端号,展示正在运行的task,executors,存储利用率,
(五)任务调度
spark集群类型调度控制应用程序之间的资源分配,在一个程序之间同时发生多个计算时。
一些名词解释:
序号 | 名词 | 描述 |
1 | Application | 使用者编写的spark程序,由驱动程序和executors组成 |
2 | Application jar | 一个jar包包含使用者的程序,某些情况下,会创建一个主jar包含其组成的依赖,但这些依赖中,不能包括hadoop和spark的相关的依赖,因为这些会在运行时,添加进去 |
3 | Driver program | 运行main方法和创建SparkContext上下文 |
4 | Cluster manager | (YARN 或者 Mesos或者Spark Standalone)负责外部应用的资源分配 |
5 | Deploy mode | 区别cluster模式,client提交驱动任务在集群外部,而cluster提交驱动程序在集群内部 |
6 | Worker node | 在整个集群中运行任务的节点 |
7 | Executor | 在一个worker node上启动的一个进程,运行任务,保存数据在内存或者磁盘上,每个应用有它自己的一系列executors |
8 | Task | 一个工作单元,轻量级线程模式运行在进程Executor里面 |
9 | Job | 一个并行的计算过程由多个task组成,并且执行一些action(例如collect,save,foreach等)等待spark响应,在log里面可见日志 |
10 | stage | 每个job被切分为多个小的task被称为stage,他们之间相互依赖,非常类似hadoop的MapReduce,在驱动的log里面可见日志 |
有什么问题 可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐