1.Spark概述
1.1 什么是Spark
http:// Apache Spark™ - Unified Engine for large-scale data analytics
Spark是基于内存的大数据计算框架。主要是为交互式查询和迭代算法而设计的,支持内存存储和高效的容错回复。
1.2 Spark的特点
·快速
与Hadoop的MapReduce相比,Spark基于内存的计算要快100倍以上。Spark 实现了高效的 DAG 执行引擎,可以通过基于内存来高效处理数据流。
·易用
Spark支持使用Scala、Python、Java、R等语言快速编写应用。此外,Spark提供超过80种算法,使用户可以快速构建不同的应用。并且Spark提供Scala、Python和R等语言的交互模式界面,使Spark编程学习更加简洁。
·通用
Spark 提供了统一的解决方案。Spark 可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX),这些不同类型的处理都可以在同一个应用中无缝使用。
·随处运行
用户可以使用Spark的独立集群模式运行Spark,也可以在Hadoop YARN资源管理器或Apache Mesos上运行Spark。Spark作为一个分布式计算框架,本身并没有存储功能,但是Spark可以从HDFS、HIVE等数据源中读取数据。
1.3 Spark生态圈
以Spark Core 为核心,可以从HDFS、Amazon S3 和 HBase等数据源中读取数据,并支持不同的程序运行模式,Spark应用程序计算的整个过程可以调用不同的组件。
如图:
Spark生态圈中重要组件介绍:
a.Spark Core : Spark的核心,提供底层框架及核心支持。
b.Blink DB : 一个用于在海量数据上进行交互式SQL查询的大规模并行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。
c.Spark SQL : 可以执行SQL查询,支持基本的SQL语法和HiveQL语法,可读取的数据源包括Hive、HDFS、关系型数据库(如MySQL)等。
d.Spark Streaming : 可以进行实时数据流计算。例如:网站的流量计算。
e.MLBase : MLBase是Spark生态圈的一部分,专注于机器学习领域,学习门槛低。有四部分组成:MLBase、MLI、MLOptimizer和MLRuntime。
f.GraphX : 提供了图计算需要的便捷API,同时兼具并行计算的性能,是做大规模图计算的一把利器。如在移动社交关系分析中可使用图计算相关算法进行处理和分析。
g.SparkR : SparkR是一个R语言开发包,使得R语言编写的程序不知可以在单机上运行,也可以作为Spark的作业运行在集群上,极大地提升了R语言的数据处理能力。
拓展:结构化数据与非结构化数据
1.结构化数据
能够以二维表存储,可以用数据库二维逻辑表来表现的数据。它是高度组织和整齐格式化的数据。如学生基本信息这样一些数据就是结构化数据。
2.非结构化数据
不能以二维表存储的数据,不方便用数据库二维逻辑表来表现的数据。如音频、图片、文档等数据。
2.Spark运行架构与原理
2.1了解Spark架构
Spark框架的核心是一个计算引擎。
架构中的基本组件:
·Application:Spark应用程序
指的是用户编写的Spark应用程序,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码。
·Driver: 负责运行应用程序(Application)的main函数并创建SparkContext,应用程序上包含了Driver功能的代码和分布在集群中多个节点上的Executor代码。
·SparkContext:应用上下文,控制整个生命周期。
·Cluster Manager: 资源管理器,即在集群上获取资源的外部服务,目前主要有Standalone和YARN。
·Spark Worker:集群中任何可以运行应用程序的节点,运行一个或多个Executor进程。
·Executor:运行在Spark Worker上的任务(Task)执行器。Executor启动线程池运行Task,并负责将数据存在内存或磁盘上,每个应用程序都会申请各自的Executor以处理任务。
·Task:被发送到某个Executor的具体任务。
2.2Spark作业运行流程
Spark有三种运行模式,即Standlone、YARN和Mesos。
1.Standalone模式
Standalone模式‘是Spark自带的资源管理器。在Standalone模式下,Driver既可以运行在主节点上,也可以运行在本地客户端(Client)上。
2.YARN模式
YARN是一种统一资源管理机制,在其上面可以运行多套计算框架。 YARN模式根据Driver在集群中的位置又分为两种,一种是YARN-Client模式(YARN客户端模式),另一种是YARN-Cluster模式(YARN集群模式)。
(1)YARN客户端模式的作业运行流程:
(2)YARN集群模式的作业运行流程:
2.3Spark的核心数据集RDD
弹性分布式数据集(Resilient Distributed Dataset,RDD),可以简单理解成一个提供了许多操作接口的数据集合。是Spark中最基本的数据抽象,代表一个不可变类型、可分区、里面的元素可并行计算的集合。
可以认为RDD是分布式的"列表List或数组Array"(与其说是列表不如说是元组【其本身是不可变类型,只能通过血缘追踪】)
RDD被划分为一到多个分区,所有分区数据分布存储在不同机器的内存或磁盘中。
RDD支持两种操作,分别为转换操作和行动操作。
(1)转换操作
将原始数据集加载为RDD数据或将一个RDD转换为另外一个RDD的操作。
(2)行动操作
将RDD存储至硬盘中或触发转换操作执行的操作。
常见的转换操作:map(),filter(),flatMap(),union(),groupByKey()等方法。
2.4 Spark核心原理
一、宽依赖与窄依赖
1、宽依赖
宽依赖(Shuffle Dependency):父RDD的每个分区都可能被子RDD的多个分区使用。(即子RDD的每一个分区都依赖于父RDD中的一个以上的分区)
2.窄依赖
窄依赖(Narrow Dependency):指父RDD的每个分区只被子RDD的一个分区所使用。(即子RDD的一个分区只依赖于某个父RDD中的一个分区)
关系图如下:
二、阶段(Stage)
一般而言,一个作业会被划分为一定数量的Stage,各个Stage之间按照顺序执行。
两类任务:ShuffleMapTask和ResultTask。ShuffleMapTask的输出是Shuffle所需的数据,ResultTask的输出则是最终的结果。所有Stage是以任务的类型为依据进行划分的。
Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到宽依赖就划分stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。stage是由一组并行的task组成。