Scala基础(11) 运行基本流程及RDD

16 篇文章 0 订阅
  • Spark和Hadoop的比较

 

MapReduceSpark
数据存储结构:磁盘HDFS文件系统的split使用内存构建弹性分布式数据集RDD,对数据进行运算和cache
编程范式:Map+ReduceDAG:Transformation+Action
计算中间结果写入磁盘,IO及序列化、反序列化代价大计算中间结果在内存中维护,存取速度比磁盘高几个数量级

Task以进程方式维护

需要数秒时间才能够启动任务

Task以线程方式

对于小数据集读取能够达到亚秒级的延迟

在实际应用中,大数据处理主要包括以下三个类型

  • 复杂的批量数据处理(通常时间跨度在数十分钟到数小时之间)[MapReduce]
  • 基于历史数据的交互式查询(通常时间在数十秒到数分钟之间)[Cloudera Impala]
  • 基于实时数据流的数据处理(通常时间在数百毫秒到数秒之间)[Storm]

Spark组件及其功能

  1. Spark Core提供内存计算
  2. Spark SQL提供交互式查询分析
  3. Spark Streaming提供流计算功能
  4. Mllib提供机器学习算法库的组件
  5. GraphX提供图计算
  • Spark运行基本流程

1. 为应用构建起基本的运行环境,即由Drive创建一个SparkContext进行资源的申请,任务的分配和监控。

2. 资源管理器为Executor分配资源,并启动Executor进程。

3. SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;

Executor向SparkContext申请Task,TaskScheduler将Task发放给Executor运行并提供应用程序代码。

4. Task在Executor上运行把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。

  • Spark运行架构特点

01 每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task

02 Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可

03 Task采用了数据本地性和推测执行等优化机制

 

  • RDD概念

一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。

RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合不能直接修改,只能基于稳定的物理存储中的数据集创建RDD,或者通过在其他RDD上执行确定的转换操作(map、join和group by)而创建得到新的RDD。

 

  • RDD的执行过程

具有“惰性求值”机制,根据代码的执行逻辑生成DAG(有向无环图),进行的一系列转换操作都不会产生实际的运算,等到最后的动作操作时,才会进行真正的计算。

优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次操作变得简单。

 

  • RDD特性

​​​​​​​现有容错机制:数据复制或者记录日志

RDD:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作。

01.高效的容错性。

02.中间结果持久化到内存中,数据在内存中的多个RDD操作之间进行传递,避免了不必要的读写磁盘开销。

03.存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化。

 

  • RDD依赖关系和运行过程

宽依赖:一个父分区对应多个子分区。

窄依赖:一个父分区对应一个子分区。

​​​​​​​关于Stage的划分

具体划分方式:1.在DAG中进行反向解析,遇到宽依赖就断开;2.遇到窄依赖就把当前的RDD加入到Stage中;3.将窄依赖尽量划分在同一个Stage中,可以实现流水线计算。(Stage划分的方式就是从反向解析对应的DAG图,然后将窄依赖形成的关系作为一个Stage)

关于RDD运行过程

01.创建RDD对象

02.SparkContext负责计算RDD之间的依赖关系,构建DAG

03.DAGScheduler负责把DAG图分解成多个Stage每个Stage中包含了多个Task,每个Task会被TaskScheduler分发给多个WorkerNode上的Executor去执行。

需要进行说明的是:Spark Streaming无法实现毫秒级的流计算,因此,对于需要毫秒级实时响应的企业应用而言,仍然需要采用流计算框架(Storm

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值