Spark知识点
(1)概念
Spark 提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。
Spark Core
包含Spark的基本功能,尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的。
Spark SQL
提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
Spark Streaming
对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据。
Mllib
一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法, 比如分类、回归等需要对大量数据集进行迭代的操作。
GraphX
控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作。
(2)核心组件
Cluster Manager
管制整个集群,监控 worker。
在 standalone 模式中即为 Master 主节点,控制整个集群,监控 worker。在 YARN 模式中为资源管理器。
Worker 节点(负责控制计算节点)
从节点,负责控制计算节点,启动Executor或者Driver。
Driver
运行 Application 的 main() 函数。
Executor
执行器,是为某个 Application运行在 worker node上的一个进程。
(3)Spark 编程模型
Spark 应用程序从编写到提交、执行、输出的整个过程步骤如下:
-
用户使用SparkContext提供的API(常用的有textFile、sequenceFile、runJob、stop等) 编写 Driver application 程序。此外 SQLContext、HiveContext 及 StreamingContext 对 SparkContext进行封装,并提供了SQL、Hive及流式计算相关的API。
-
使用SparkContext提交的用户应用程序,首先会使用BlockManager和BroadcastManager 将任务的Hadoop配置进行广播。然后由DAGScheduler将任务转换为RDD并组织成DAG, DAG 还将被划分为不同的 Stage。最后由 TaskScheduler 借助 ActorSystem 将任务提交给 集群管理器(Cluster Manager)。
-
集群管理器(ClusterManager)给任务分配资源,即将具体任务分配到Worker上,Worker 创建Executor来处理任务的运行。Standalone、YARN、Mesos、EC2 等都可以作为Spark 的集群管理器。
(4)Spark 计算模型
RDD 可以看做是对各种数据计算模型的统一抽象,Spark 的计算过程主要是 RDD 的迭代计算过 程。RDD的迭代计算过程非常类似于管道。分区数量取决于partition数量的设定,每个分区的数 据只会在一个Task中计算。所有分区可以在多个机器节点的Executor 上并行执行。
(5)Spark 运行流程
-
构建 Spark Application的运行环境,启动 SparkContext。
-
SparkContext向资源管理器(可以是Standalone、Mesos、Yarn )申请运行Executor资源,并启动 StandaloneExecutorbackend。
-
Executor向 SparkContext申请 Task 。
-
SparkContext将应用程序分发给 Executor。
-
SparkContext构建成 DAG图,将 DAG图分解成 Stage ,将 Taskset发送给 Task Scheduler ,最后由 Task Scheduler将 Task发送给 Executor运行。
-
Task在 Executor上运行,运行完释放所有资源。
(6)Spark RDD 流程
-
创建RDD对象。
-
DAGScheduler 模块介入运算,计算 RDD 之间的依赖关系,RDD 之间的依赖关系就形成了 DAG。
-
每一个 Job 被分为多个 Stage。划分 Stage 的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个Stage,避免多个Stage之间的消息传递开销 。
(7)Spark RDD
(1)RDD 的创建方式
1、从Hadoop文件系统(或与Hadoop兼容的其他持久化存储系统,如Hive、Cassandra、 HBase)输入(例如HDFS)创建。
2、从父RDD转换得到新RDD。
3、通过parallelize或makeRDD将单机数据创建为分布式RDD。
(2)RDD 的两种操作算子
转换(Transformation)与行动(Action)
对于RDD可以有两种操作算子:转换(Transformation)与行动(Action)。
1、 转换(Transformation):Transformation操作是延迟计算的,也就是说从一个RDD转换生成另一个RDD的转换操作不是马上执行,需要等到有Action操作的时候才会真正触发运算。
2、行动(Action):Action算子会触发 Spark 提交作业(Job),并将数据输出 Spark 系统。