本系列讲座是冯沁原先生对Sameer Farooqui的《Advanced Apache Spark》的解说。
根据对215名学生的调查结果显示,Spark最主要资源管理方式按排名为Hadoop Yarn, Apache Standalone 和Mesos。在单机使用时,Spark还可以采用最基本的local模式。
图1.如何部署Spark的统计图
本节主要介绍Local和Spark Standalone资源管理模式。下一节将介绍YARN。
1. 传统Hadoop MapReduce的资源管理方式
图2.有两个Map Reduce App运行的Hadoop的资源管理
Name Node管理所有节点的情况,每台机器里有Data node, 存储数据。
Job Tracker将任务发到Task Tracker。 每个Task Tracker启动Map和Reduce工作。
2. Spark最基本的Local模式。
图3. 本地(Local)运行Spark。
带有8个内核的CPU启动了一个JVM, 右下黑色的是Driver, 启动12个task的本地运行环境, 通过内部的线程进行并发运算。
图3的JVM中存了两个逻辑RDD, 紫色的RDD有三个分区。蓝色的RDD有两个分区。
右侧程序演示了在scala中用SparkConf设置了如左侧的运行环境, 注意到这段程序还为Executor分配了3GB的内存。
3. Spark Standalone模式
Spark Standalone Mode用于多台机器的集群(cluster)管理。一台Master负责管理集群。
每个机器里有一个worker与Spark Master交互。
RDD现在被分块到了多台机器中。如图蓝色RDD有八个分块, 每台分到两个。紫色的RDD分成了两个分块,并且复制到了另两台机器。
每台机器的内核数量不同,可以并发的任务数也不同,左起第二台机器的内核数量多,可以分配更多的并发任务。注意到图中用SSD作为为中间存储设备。SSD比硬盘快很多,可以提高性能。
图4. 单个Master的Standalone调度
多个master时,可以用zookeeper调度,如图5。
图5.多个Master时的Standalone模式
一个worker可以调用多个executor, 如图6。
图6. 一个Worker调度多个Executor
默认一个Worker为一个Driver调度一个Executor,如果我们希望一个Driver用两个Executor,则要为该Driver创建两个Worker。如图7。
图7一个Driver调用两个Executor.
4. Spark为我们提供了任务执行统计信息的网页。通过这些页面我们可以看到当前的任务数量,Worker以及Executor信息,正运行的Job, Stages和Tasks, 内存的使用情况等等信息。
图8. Spark任务执行统计UI
5. 总结Spark standalone工作模式
Spark用Master来管理整个Cluster, worker来与Master进行交互管理当地的执行情况。Worker 有Executor,里面有多个Job执行。
每个工作(Job)分多个阶段(Stage), 每个阶段 (Stage)分为多个任务(Task)。
RDD的分块执行。使用统计面板里的具体信息理解任务调度。