博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark核心组件
阅读量:4667 次
发布时间:2019-06-09

本文共 1665 字,大约阅读时间需要 5 分钟。

Spark核心组件

1、RDD

resilient distributed dataset, 弹性分布式数据集。逻辑上的组件,是spark的基本抽象,代表不可变,分区化的元素集合,可以进行并行操作。该类封装了RDD的基本操作,例如map、filter、persist等,除此以外,PairRDDFunctions封装了KV类型RDD的操作,例如groupByKey和join。对于spark的KV类型RDD直接隐式转换成PairRDDFunctions类,具备了byKey的操作。

RDD轻量级集合,内部没有数据。内部,每个RDD具有5方面主要属性:

  1. 分区列表
  2. 用于计算每个切片的函数(算法)
  3. 到其他RDD的依赖列表
  4. (可选)对于KV类型的RDD有一个分区类
  5. (可选)计算每个切片的首选位置列表

spark中所有的调度和执行都是基于这些方法,也允许每个RDD实现自己的计算方式。RDD的方法主要包含两种类型Transformations和action。返回rdd都是变换,不会导致job的执行,延迟计算,延迟到action方法的调用。

1.1 transform

  • map
  • filter
  • mapValues
  • flatMap
  • reduceByKey
  • groupByKey
  • sortByKey

2、SparkContext

上下文创建时,在worker节点直接启动job的执行器进程(CoarseGrainedExecutorBackend),spark入口点,表示到spark集群的一个连接。创建该类时,同时创建task调度器和后台调度器,后台调度器还要决定默认并发度问题。

3、DagScheduler

高级调度层,面向stage进行调度,为每个job计算stage,寻找最优路径执行job。该调度器以taskset方式提交stage给下层调度器(TaskScheduler)。Spark以shuffle为边界,将众多的RDD划分成stage,窄依赖的RDD划分到一个stage中。shuffle依赖需要多个stage,DAG调度检测运行task的首选位置,该调度器将位置信息和状态传递给底层的task调度器。DAG调度器处理因shuffle output丢失导致故障,此时上一个stage需要重新提交。在阶段stage内,不是由shuffle output丢失导致的故障都由下层的task调度器处理。缓存跟踪,避免rdd重复计算。首选位置:首选那个节点来执行task。为了防止内存泄漏,job完成后清除数据结构。递归提交每个Stage,每个stage都是以Tasket方式提交任务集合给下层的TaskScheduler,因此Dag调度器需要计算每个stage的任务集合。提交的阶段通过分区列表映射成Task集合,ShuffleMapStage对应ShuffleTask,ResultStage对应

ResultTask。

4、TaskSchedulerImpl

5、SchedulerBackend

6、job

activejob,提交给调度器的最顶层work单位,每个job可能需要多各stage的执行,并产生中间结果。

7、stage

stage是task的集合,数量同stage的最后的一个rdd的分区数相同。stage按照shuffle进行划分边界,存在前后依赖,上一阶段计算输出,下一个提取上一个的结果。主要有两种类型stage:

  1. ResultStage
    最后的阶段,执行action。在RDD的某些分区上应用函数来计算action的结果。
  2. ShuffleMapStage
    产生map的output,stage如果重用了rdd,可以跨job共享。该阶段是DAG图计算过程中的中间阶段,执行时保存输出文件供reduce任务抓取,该阶段可以单独提交,DagScheduler.submitMapStage();

8、Task

转载于:https://www.cnblogs.com/xupccc/p/9800349.html

你可能感兴趣的文章
Window 分布式学习-好文收藏
查看>>
Android TextUtils类介绍
查看>>
linux echo设置颜色
查看>>
英文参考文献标准格式:论文参考文献格式规范(转载)
查看>>
css div框加小箭头
查看>>
Eclipse快捷键与使用技巧总结
查看>>
Solr4.8.0源码分析(16)之SolrCloud索引深入(3)
查看>>
PEP8 - Python编码规范
查看>>
div放置图片总结
查看>>
FZOJβ #45. 染色问题
查看>>
Python之SYS模块
查看>>
webapi文件上传和下载
查看>>
HDU 1540 Tunnel Warfare [二分 + 线段树]
查看>>
C++:构造函数和析构函数能否为虚函数
查看>>
win7便笺元数据损坏,最新解决办法
查看>>
mongod
查看>>
vim配置python高亮和缩进
查看>>
Spring3.0.5 获取表中自增的主键(mysql)
查看>>
delphi dxBarManager 的dxBarEdit 输入问题
查看>>
Hadoop入门介绍一
查看>>