深入浅出Spark(三)什么是Standalone


(cdbdyx) #1

本系列讲座是冯沁原先生对Sameer Farooqui的《Advanced Apache Spark》的解说。

根据对215名学生的调查结果显示,Spark最主要资源管理方式按排名为Hadoop Yarn, Apache Standalone 和Mesos。在单机使用时,Spark还可以采用最基本的local模式。

![](data:image/svg+xml;utf8,)

图1.如何部署Spark的统计图

本节主要介绍Local和Spark Standalone资源管理模式。下一节将介绍YARN。

1. 传统Hadoop MapReduce的资源管理方式

![](data:image/svg+xml;utf8,)

图2.有两个Map Reduce App运行的Hadoop的资源管理

Name Node管理所有节点的情况,每台机器里有Data node, 存储数据。
Job Tracker将任务发到Task Tracker。 每个Task Tracker启动Map和Reduce工作。

2. Spark最基本的Local模式。

![](data:image/svg+xml;utf8,)

图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比硬盘快很多,可以提高性能。

![](data:image/svg+xml;utf8,)

图4. 单个Master的Standalone调度

多个master时,可以用zookeeper调度,如图5。

![](data:image/svg+xml;utf8,)

图5.多个Master时的Standalone模式

一个worker可以调用多个executor, 如图6。

![](data:image/svg+xml;utf8,)

图6. 一个Worker调度多个Executor

默认一个Worker为一个Driver调度一个Executor,如果我们希望一个Driver用两个Executor,则要为该Driver创建两个Worker。如图7。

![](data:image/svg+xml;utf8,)

图7一个Driver调用两个Executor.

4. Spark为我们提供了任务执行统计信息的网页。通过这些页面我们可以看到当前的任务数量,Worker以及Executor信息,正运行的Job, Stages和Tasks, 内存的使用情况等等信息。

![](data:image/svg+xml;utf8,)

图8. Spark任务执行统计UI

5. 总结Spark standalone工作模式

  • Spark用Master来管理整个Cluster, worker来与Master进行交互管理当地的执行情况。Worker 有Executor,里面有多个Job执行。

  • 每个工作(Job)分多个阶段(Stage), 每个阶段 (Stage)分为多个任务(Task)。

  • RDD的分块执行。使用统计面板里的具体信息理解任务调度。

    本文作者:Robert Cai

    更多精彩内容,欢迎访问官网 http://BitTiger.io 或关注 “论码农的自我修养” 微信公众号:bit_tiger