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

Valentina ·
更新时间:2024-09-21
· 531 次阅读

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

Task以进程方式维护

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

Task以线程方式

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

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

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

Spark组件及其功能

Spark Core提供内存计算 Spark SQL提供交互式查询分析 Spark Streaming提供流计算功能 Mllib提供机器学习算法库的组件 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


作者:KaiwenYu



运行 rdd Scala

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章