终于有一篇讲清楚了什么是Spark

@Spark

Spark概述

Spark是Apache软件基金会旗下的顶级开源项目之一。使用简练、优雅的Scala语言编写,借鉴了mapreduce“计算向数据靠拢”的大数据计算优点,同时解决了mapreduce表达能力有限(计算都必须转化成map和reduce两个操作)、磁盘I/O开销大、延迟高等问题。Spark计算模式也属于Mapreduce,但不局限于Map和reduce,还提供了多种数据集操作类型,编程模型比Mapreduce更灵活;提供了内存计算,中间结果直接存放入内存中,带来了更高的迭代执行机制;基于DAG(有向无环图)的任务调度机制,要优于mapreduce的迭代执行机制。

主要特点

1、运行速度快:Spark使用先进的有向无环图执行引擎,基于内存的执行速度比mapreduce快上100倍,基于磁盘的执行速度也快10倍

2、容易使用:支持使用Scala、Java、Python和R语言进行编程,并且可以通过Spark Shell进行交互式编程

3、通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件

4、运行模式多样:可运行于独立的集群模式中,或者运行于hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、HBase、Hive等多种数据源

Spark运行架构

基本概念

RDD:弹性分布式数据集(Resilience Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。

DAG:是有向无环图(Directed Acyclic Graph)的简称,反映RDD之间的依赖关系。

Excutor:是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据。

应用(Application):用户编写的Spark应用程序。

任务(Task):运行在Excutor上的工作单元。

作业(Job):一个作业包含多个RDD及作用于相应RDD上的各种操作。

阶段(Stage):是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。

架构设计

在这里插入图片描述
运行基本流程

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

RDD特点

RDD:弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。

RDD 具有容错机制,并且只读不能修改,可以执行确定的转换操作创建新的 RDD。具体来讲,RDD 具有以下几个属性。

只读:不能修改,只能通过转换操作生成新的 RDD。
分布式:可以分布在多台机器上进行并行处理。
弹性:计算过程中内存不够时它会和磁盘进行数据交换。
基于内存:可以全部或部分缓存在内存中,在多次计算间重用

RDD运行原理

RDD采用了惰性调用,即在RDD的执行过程中,真正的计算发生在RDD的“行动”操作,对于“行动”之前所有“转换”操作,Spark只是记录下“转换”操作应用的一些基础数据集以及RDD生成的轨迹,及相互之间的依赖关系,而不会触发真正的计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值