赞
踩
Spark是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。
Hadoop虽然已经称为大数据技术的事实标准,但其本身还存在诸多缺陷,最主要的缺陷是MapReduce计算模型延迟高,无法胜任实时、快速计算的需求,因而只适用于离线批处理的应用场景。
Hadoop存在以下缺点
:
Spark在借鉴了Hadoop MapReduce优点的同时,解决了MapReduce所面临的缺陷。相比于MapReduce,Spark主要具有如下优点:
Spark最大的特点就是将计算数据、中间结果都存储在内存中,避免了从磁盘中频繁
读取数据,大大减小了IO开销。
因而Spark更适合于迭代运算比较多的数据挖掘和机器学习运算。
Hadoop进行迭代计算非常耗资源,每次读取都需要从磁盘中写入,IO开销大。
在Spark中,一个应用(Application)由一个任务控制节点(Driver)和若干个作业(Job)构成,
一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成。
当执行一个应用时,任务控制节点回向集群管理器(Cluster Manager)申请资源,启动Executor,
并向Executor发送应用程序代码和文件,然后在Executor上执行任务。
运行结束后,执行结果返回任务控制节点,或者写道HDFS或其他数据库中。
(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调度器,运行完毕后写入数据并释放所有资源。
RDD叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的分布式对象集合。
弹性表示RDD中的数据集可以存储在内存或者是磁盘,RDD中的分区是可以改变的。
分布式表示可以在集群并行计算。
数据集就是一个集合,用于存放数据。
每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存在集群中的不同节点上,从而可以在集群中的不同节点上进行并行计算。
RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合
,不能直接修改,只能基于稳定的物理存储中的数据集来创建RDD,或者通过在其他RDD上执行确定的转换操作而创建得到新的RDD。
RDD提供了一组丰富的操作以支持常见的数据运算,分为"Action"和”Transformation"
两种类型,动作操作比如count、collect等接受RDD但是返回非RDD,转换操作比如map、filter、join操作等接受RDD返回RDD。RDD比较适合于对数据集中元素执行相同操作的批处理应用,而不适合细粒度(针对某个元素操作)的应用。
Spark用Scala语言实现了RDD的API,程序员可以通过调用API实现对RDD的操作。
RDD典型的执行过程如下:
1、RDD读入外部数据源或内存中的集合进行创建;
2、RDD经过一系列转换操作,每一次产生的RDD都会传给下一个RDD使用;
3、最后一个RDD经过行动操作,并输出到外部数据源。
参考
http://dblab.xmu.edu.cn/blog/1709-2/
如有侵权,请联系作者删除
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。