当前位置:   article > 正文

Spark基础知识_当一个spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由 创建

当一个spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由 创建


Spark定义

Spark是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。

Spark的特点

  • 运行速度快:Spark使用先进的DAG(有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可以比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍;
  • 易于使用:Spark支持Scala、Java、Python和R语言编程,简介的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程;
  • 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算;
  • 运行模式多样:Spark可以运行于独立的集群模式中,或者运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。

Spark的组成

Spark

  • Apache Spark Core:提供了Spark最基础与最核心的内容,比如内存计算、任务调度、故障恢复、存储管理等,其他功能都是在其上扩展;
  • Spark SQL:Spark SQL是Spark用来操作结构化数据的组件,它增加了带有Schema信息的RDD(弹性分布式数据集),使用户可以在Spark SQL中执行SQL语句,数据既可以来自RDD,也可以是Hive、HDFS、Cassandra等外部数据源,还可以是JSON数据格式;
  • Spark Streaming:Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思想是将流式计算分解成一系列短小的批处理作业,Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等。
  • MLlib:MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;
  • GraphX:GraphX是Spark中用于图计算的API,它性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

Spark相对于Hadoop的优势

Hadoop虽然已经称为大数据技术的事实标准,但其本身还存在诸多缺陷,最主要的缺陷是MapReduce计算模型延迟高无法胜任实时、快速计算的需求,因而只适用于离线批处理的应用场景。
Hadoop存在以下缺点

  • 表达能力有限:计算都必须要转成Map和Reduce两个操作,但这并不适合所有的情况,难以描述复杂的数据处理过程;
  • 磁盘IO开销大:每次执行时都需要从磁盘读取数据,并且在计算完成后需要将中间结果写入到磁盘中,IO开销大;
  • 延迟高:一次计算可能需要分解成一系列按顺序执行的MapReduce任务,任务之间的衔接由于涉及到IO开销,会产生较高的延迟,而且,在前一个任务执行之前,其他任务无法开始,难以胜任复杂任务、多阶段的计算任务。

Spark在借鉴了Hadoop MapReduce优点的同时,解决了MapReduce所面临的缺陷。相比于MapReduce,Spark主要具有如下优点:

  • Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活;
  • Spark提供了内存计算,中间结果直接放到内存中,带来了更高的迭代运算效率;
  • Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制。
Spark最大的特点就是将计算数据、中间结果都存储在内存中,避免了从磁盘中频繁
读取数据,大大减小了IO开销。
因而Spark更适合于迭代运算比较多的数据挖掘和机器学习运算。
Hadoop进行迭代计算非常耗资源,每次读取都需要从磁盘中写入,IO开销大。
  • 1
  • 2
  • 3
  • 4

Spark基本概念

  • RDD:弹性分布式数据集(Resilient Distributed Dataset),是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
  • DAG:有向无环图,反映RDD之间的依赖关系;
  • Executor:是运行在工作节点上的一个进程,负责运行任务,并为应用程序存储数据。
  • 应用:用户编写的Spark应用程序。
  • 任务:运行在Executor上的工作单元;
  • 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作。
  • 阶段:作业的基本调度单位,一个作业会分为多组任务,每组任务被称为阶段。

Spark运行架构

Spark运行架构

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

当执行一个应用时,任务控制节点回向集群管理器(Cluster Manager)申请资源,启动Executor,
并向Executor发送应用程序代码和文件,然后在Executor上执行任务。

运行结束后,执行结果返回任务控制节点,或者写道HDFS或其他数据库中。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Spark运行基本流程

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调度器,运行完毕后写入数据并释放所有资源。

Spark RDD

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经过行动操作,并输出到外部数据源。
  • 1
  • 2
  • 3
  • 4
  • 5

参考
http://dblab.xmu.edu.cn/blog/1709-2/
如有侵权,请联系作者删除

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号