Spark简介
日期:2022年11月01日     新闻分类: 技术中心      浏览:132次
内容导读:Spark简介


Spark是一种基于内存计算的大数据并行计算框架,最早是由加州大学伯克利分校开发,现已经成为Apche顶级开源项目,其作为MapReduce 的替代方案,兼容HDFS、Hive等分布式存储层,相对于MapReduce其具有以下优点:

基于内存计算,避免了大量IO操作,速度快

秉持移动计算优于移动数据的理念,大大减少了文件的传输代价

更好的容错性

提供了实时的流处理功能

简单易用

强大的社区支持

支持多语言编程接口

2.Spark 与 Hadoop

Spark作为hadoop大数据处理体系中的一员,最新的架构基于hadoop2.0

hadoop2.0

Hadoop2.0的架构分为三层,最底层为分布式存储系统即HDFS,中间层为资源管理系统,广泛使用Yarn,最上层为分布式计算框架层,在这一层可以存在各种各样的并行计算框架,比如MapReduce、Spark等,其实在hadoop1.0时是没有资源管理系统这一层的,在老版本中,是由资源管理模块来对计算资源进行管理的,不同的分布式计算框架对应不同的资源管理模块,MapReduce 对应MapReduce的资源管理模块,Spark对应Spark的资源管理模块,随着大数据处理技术的不断发展,出现了各式各样的计算框架,为了使Hadoop更好的支持这些计算框架,因此2.0中提出了资源管理系统层,所有计算框架的资源统一由资源管理系统来分配管理,从而可以更好的支持不断推陈出新的计算框架;

3.Spark生态系统

Spark主要提供了几部分功能:

SparkCore :基于RDD提供了丰富的操作接口,更加灵活的处理批处理作业

Spark SQL:兼容Hive的接口HQL,提供更快速度的SQL查询

Spark Streaming:将流式计算分解为短批处理作业,支持流式处理作业

GraphX:基于Spark的图处理框架,提供图构建及图转换功能

MLlib: 构建在Spark上的机器学习算法库,支持常见的推荐算法、聚类算法

4.Spark RDD

在Spark中最为关键的当属RDD(Resilient Distributed DataSets) ,全称:弹性分布式数据集,RDD存储在内存中,因此大大减少了像MapReduce中的文件IO操作,提高了运算速度,RDD来源只有两个途径:

来自于内存集合和外部存储系统

来自于其他RDD,比如通过转换操作:map、filter、join等

RDD具有以下五种特性:

分区属性:每个RDD由若干个partition构成

依赖关系:RDD之间是具有依赖关系的,下一小节会详细介绍

分区单位计算:RDD中的计算都是以分区为单位的,即每个运算作用于一个分区中的所有元素

分区函数:分为哈希分区函数及区域分区函数

优先位置:Spark秉承移动数据不如移动计算的理念,在生成运算任务时优先会将计算放在数据所在的节点上,尽量避免数据的传输开销

4.1 RDD 依赖关系

RDD依赖关系分为两种,窄依赖与宽依赖,两者定义如下:

窄依赖:是指每个父RDD的一个Partition最多被子RDD的一个Partition所使用,例如map、filter、union等操作都会产生窄依赖;

宽依赖:是指一个父RDD的Partition会被多个子RDD的Partition所使用,例如groupByKey、reduceByKey、sortByKey等操作都会产生宽依赖;

依赖关系是Spark切分任务阶段的依据;

4.2 RDD操作

RDD操作可简单分为两类,一类为Transformation操作,另一类为Action操作,两者区别如下:可以简单的认为Transformation操作只是建立了RDD之间的逻辑关系,并不会真正触发运算,只有遇到Action操作后才会真正触发作业的提交,一个spark程序会穿插着Transformation操作与Action操作,Action才会得到最终的结果;

5.Spark运行模式及原理

一个Spark程序可从逻辑上拆分为Driver程序与Worker程序,Driver程序在运行过程中会创建SparkContext,SparkContext是整个程序的入口,SparkContext在初始化过程中会创建DAGScheduler和TaskScheduler,分别负责作业调度和任务调度,这两个模块是Spark程序切分作业及任务调度最为核心的模块,后面小节会进行详细介绍,SparkContext通过资源管理模块与Executor通讯,在SparkContext申请到计算资源后,会将任务分配到具体的Executor上运行;SparkContext初始化过程中会生成DAG图,DAG图表示了整个任务中RDD之间的逻辑关系,DAGScheduler会从该图的终结点向前开始遍历,当遇到宽依赖时会将当前遍历的RDD操作划归于一个调度阶段(即一个任务集合),然后再进行下一阶段的遍历,最后将由若干个调度阶段组成的作业提交给TaskScheduler,作业的执行是按照调度阶段顺序有序执行的,只有前一阶段执行成功后才会进行下一阶段的调度,当任务集合提交给TaskScheduler后,任务集管理模块会创建TaskSetManager实例来对该任务集进行管理,申请到资源后任务开始执行,任务执行结束后结果会反馈给TaskScheduler,任务集任务执行情况同样会反馈给DAGScheduler,当前阶段任务集执行成功后会依次进行下一阶段任务集的调度;

6.Spark任务监控

Spark自带了UI界面来向用户展示作业的执行情况;通过UI界面可以查看Job,Stage,Storge等的执行情况;

版权所有: 山西2022世界杯买球股份有限公司 备案号:晋ICP备09004627号-2   

邮箱

keda@sxkeda.com

电话

400-0351-150

微信

专属
客服

留言

右侧导航