您的位置:首页 > 运维架构 > Apache

Apache Spark - Cluster Mode Overview (Spark集群模式一览)

2014-03-08 12:27 453 查看


Apache Spark 集群模式一览


本文档给出了在集群上运行Spark的简短介绍,可以帮助读者深入理解组件.


Components 组件


在集群中,Spark 应用程序作为进程的独立集合存在, 在主程序中协调SparkContext对象 (被称之为驱动程序,driver program). 具体地说, 在集群中运行的时候, SparkContext 能够连接到各种类型的集群管理器  (cluster managers,无论是Spark自己的单独集群管理器 或者 Mesos/YARN), 集群管理器用于分配资源. 一旦连接, Spark
获得在集群中各节点的 executors (运行计算或存储数据的工作进程). 然后, 发送程序代码 (通过 JAR 或 Python 文件定义,发送到 SparkContext) 到 executors. 最后, SparkContext 为executors发送 tasks 用于执行.



架构中有些有用的信息需要注意:
每个应用程序都有独立的 executor 进程, 他们的作用是维持应用程序和在多线程中运行 tasks . 好处在于在调度端 (每个计划tasks 的驱动) 和executor端 (不同JVM下的的各种tasks )都是封闭的. 但是, 这意味着数据在不同的Spark应用程序(SparkContext的实例)中无法共享,除非将这些数据写入外部存储系统.
Spark 对下层的 cluster manager来说是不可知的. 只要他能接受 executor 进程, 并且相互连接, 运行轻而易举。在其他 cluster manager中也是如此(例如 Mesos/YARN).
由于driver计划了cluster 中的tasks, 它可能会在worker node附近运行, 最好是在本地局域网. ,如果你想向cluster  发送远程请求,最好向driver打开RPC执行近端操作而不是在worker node上远程 运行driver.


Cluster Manager Types 集群管理者类型


系统现在支持三种 cluster managers:
Standalone – Spark 中包含的一个简单地 cluster manager 可以方便的建立一个cluster.
Apache Mesos – 一个通用的 cluster manager ,能够运行 Hadoop
MapReduce 和服务应用.
Hadoop YARN –  Hadoop 2中的资源管理者.

此外, Spark的 EC2 launch scripts 可以在Amazon EC2上方便的建立一个单独集群.


Shipping Code to the Cluster 发送代码到集群


推荐的方法是使用SparkContext的构造器发布代码到集群, 这样可以传布 JAR 文件(Java/Scala) 或是 .egg 和.zip 库(Python) 到工作节点. 
还可以通过 
SparkContext.addJar
 和
addFile
动态加入新文件到executors.


用于addJar / addFile的URIs 


file: - 绝对路径和 
file:/
 URIs (由 HTTP 文件服务器提供), 每个 executor
从HTTP服务器中下载文件
hdfs:, http:, https:, ftp: -  通过 URI
下载文件和JARs
local: -  以 local:/ 开头的URIis 意味着每个工作节点都有本地文件. 也就是说不会进行网络IO操作, 同时大型的files/JARs会运行更好, 或者通过 NFS, GlusterFS等共享.

注意:
为了构建executor节点的SparkContext ,这些
JARs 和 files 被拷贝到每个工作目录. 这将会占用大量空间,请及时清理.


Monitoring 性能监控


每个driver program 拥有一个Web UI, 端口号4040, 其中会有 正在运行的 tasks, executors, 存储空间使用等信息. 打开 
http://<driver-node>:4040
 就能看到这个界面.  monitoring
guide 会描述其他的监控选项.


Job Scheduling 任务调度


Spark提供控制资源分配,无论跨应用程序 (在cluster manager这个级别) 还是内部应用程序 (SparkContext中有多重运算).  job scheduling overview 描述了更多细节.


Glossary 术语表


下表简单介绍了些用于集群的概念:
TermMeaning
Application使用Spark构建的用户程序. 包括集群中的驱动程序(driver program)和执行器(executors).
Driver            program用于运行main()和构建SparkContext的进程
Cluster 

manager
集群中获取资源的对外服务 (例如. Spark中的standalone manager, Mesos, YARN)
Worker node集群中可以运行程序的任意节点
Executor在worker node上开始application的进程, 它运行tasks,在内存或硬盘中保持数据. 每个application都有自己的executors.
Task发送到 executor的工作单元
Job由多tasks构成的并行计算,引起Spark的action (例如. 
save
collect
);
你将会在driver的logs中看到这些术语.
Stage每个Job被分成多个被称之为Stage的任务集 ,他们相互依赖(类似于MapReduce中的 map 和reduce步骤); 你将会在driver的logs中看到这些术语.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息