Spark---大数据分析引擎

一、Spark简介

1.Spark是一个基于内存的快速、通用、可扩展的大数据分析引擎。
2.Spark在2009年诞生于美国加州大学伯克利分校的AMP实验室,项目采用Scala编写;2013年6月成为Apache的孵化项目;2014年2月打破了Hadoop保持的基准排序记录,成为Apache的顶级项目,广受欢迎,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(Hadoop、Spark、Storm)。

二、Spark的特点

1.运行速度快

Spark使用先进的DAG(有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度比Hadoop快上百倍,基于磁盘的执行速度也要快上10倍。
Hadoop和Spark中的逻辑回归

2.容易使用(易用)

Spark支持使用Scala、java、Python和R语言进行编程,还支持超过80种高级算法,简介的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程。

3.通用性

Spark提供了完整而强大的技术栈,包括SQL查询(Spark SQL)流式计算(Spark Streaming)机器学习(MLlib)、**图计算(GraphX)**组件,这些组件可以无缝整合在同一个应用中,减少开发和维护的人力成本,和部署平台的物力成本。

4.运行模式多样(兼容性)

Spark可以非常方便的和其他开源产品进行融合。Spark可运行于独立的集群模式,或者运行于hadoop中,也可以运行于Amazon EC2等云环境,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。

三、Spark生态中的组件

1. Spark Core

Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等,主要面对批数据处理。Spark建立在统一的抽象RDD(弹性分布式数据集)上,使其可以以基本一致的方式应对不同的大数据处理场景。

2. Spark SQL

Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员不需要自己编写Spark应用程序,开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析。

3. Spark Streaming

Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。Spark Streaming支持多种数据输入源,如Kafka,Flume和TCP套接字等。

4. MLlib(机器学习)

MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作。

5. GraphX(图计算)

GraphX 是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,GraphX性能良好,拥有丰富的功能和运算符,能在海量数据上自如地进行复杂的图算法。

注意:无论是Spark SQL、Spark Streaming、MLlib还是GraphX,都可以使用Spark Core的API处理问题,它们的方法几乎是互通的,处理的数据也可以共享,不同应用之间的数据可以无缝集成。

四、Spark运行架构

1.基本概念

(1)RDD:是弹性分布式数据集(Resilient Distributed DataSet)的英文缩写,是分布在内存的一个抽象概念,提供了一种高度受限的共享内存模型。
(2)DAG:是Directed Acyclic Graph(有向无环图)的英文缩写,反应RDD之间的依赖关系。
(3)Executor:是运行在工作节点(Worke Node)上的一个进程,负责运行任务,并为应用程序存储数据。
(4)应用:用户编写的Spark应用程序。
(5)任务:运行在Executor上的工作单元。
(6)作业:一个作业包含多个RDD及作用于相应RDD上的各种操作。
(7)阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,,或者也被称为“任务集”。

2.架构设计


如图所示:包括集群资源管理器(Cluster Manager)运行作业任务的工作节点(Worker Node)每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)。其中,集群资源管理器可以是Spark自带的资源管理器,也可以是YARN或Mesos等资源管理框架。

在Spark中,一个应用(Application)由一个任务控制节点(Driver)和若干个作业(Job)构成,一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成

3.Spark运行基本流程


(1)当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境。即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等。SparkContext 会向资源管理器注册并申请运行Executor的资源。
(2)资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上。
(3)SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAG任务调度器(DAGScheduler)进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时SparkContext将应用程序代码发送给Executor。
(4)任务在Executor运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所以资源。

发布了13 篇原创文章 · 获赞 14 · 访问量 651

猜你喜欢

转载自blog.csdn.net/LCY_1013/article/details/105042812