共计 2018 个字符,预计需要花费 6 分钟才能阅读完成。
如果说对于的大数据处理最有奉献的当属 Hadoop 的三招绝学,HDFS、YARN、MapReduce,而 Spark 师从 Hadoop,青出于蓝而胜于蓝,创立的 Spark Core 改良了 Hadoop 基于磁盘的分布式计算,独成一派创立了时机内存的分布式计算引擎。Hadoop MapReduce 欲知 Spark 详情还必须从 Hadoop 的三招绝学说起,其一便是 MapReduce。顾名思义,MapReduce 实际上就是两种计算的形象,Map 和 Reduce 类。Map:用于封装数据映射逻辑,通过 map 接口来定义数据转换流程关上文件 Reduce:用户封装数据聚合逻辑,通过 reduce 接口来定义数据汇聚过程
Map 计算完结后,一般来说须要对数据进行散发能力启动 Reduce 计算逻辑来执行数据汇聚的操作,数据散发的过程称之为 Shuffle。MapReduce 提供的分布式任务调度让开发者专一于业务逻辑实现,而无需关怀依赖治理、代码散发等分布式实现问题。在 MapReduce 框架下,为了实现端到端的计算作业,Hadoop 采纳 YARN 来实现分布式资源调度从而充分利用便宜的硬件资源,采纳 HDFS 作为计算形象之间的数据接口来躲避便宜磁盘引入的零碎稳定性问题。尽管 Hadoop 自成体系的三板斧能够实现任何分布式解决工作,然而也存在一个不可扭转的弊病,基于磁盘的分片正本会带来微小的磁盘 I / O 和网络 I / O 开销。Spark CoreSpark 是基于 Hadoop 的一种改良,基于内存的分布式计算引擎。基于内存的计算并不是将所有的计算都放在的内存中实现,而是通过 RDD 来实现。RDDRDD(Resilient Distributed Datasets),全称是“弹性分布式数据集”,是 Spark 对于分布式数据进行形象的数据模型,这种数据模型用于囊括、封装所有内存中和磁盘中的分布式数据实体。RDD 算子 VS HDFS 算子?回顾 Hadoop 计算流程,MapReduce 计算模型中采纳 HDFS 所做算子之间的数据接口,所有算子的长期后果都以文件的模式存储到 HDFS,以供上游数据的生产,上游的算子再从 HDFS 读取文件转为键值对,通过 Map 或者 Reduce 操作后再以文件的存储到 HDFS。不难发现,以 HDFS 作为数据接口才是 Hadoop 计算效率低的本源
RDD 的设计以数据作为第一视角,不再强调算子的重要性,算子仅仅是 RDD 数据转换的一种计算规定,map 算子和 reduce 算子纷纷被弱化、浓缩。以 RDD 外围属性中的 dependencies 与 compute 来确定 RDD 流转操作,这两个操作形容了“从以后 RDD 登程,再通过怎么的计算规定与转换,能够取得新的数据集”。
能够看出 RDD 通过 dependencies 中指定的依赖关系和 compute 定义的计算逻辑形成了一条从终点到起点的数据转换门路。这条门路在 Spark 有个专门的术语,叫做 Lineage——血统。Spark Core 依赖血统进行依赖治理、阶段划分、工作散发、失败重试,任意一个 Spark 计算作业都能够析构为一个 Spark Core 血统。另外三个外围属性就是 partitions、partitioner 和 preferredLocations。partitions 属性记录了 RDD 的每一个数据分片,不便开发者灵便地拜访数据集 partitioner 则形容了 RDD 划分数据分片的规定和逻辑,采纳不同的 partitioner 对 RDD 进行划分,可能以不同的形式失去不同数量的数据分片 preferredLocations —— 地位偏好,该属性与 partitions 属性一一对应,定义了每一个数据分片的物理地位偏好。具体来说包含:本地内存、本地磁盘、本机架磁盘、其余机架磁盘 Lineage VS DAG 如果说 Lineage 是从数据流转的视角登程来形容 RDD 转换逻辑,那么 DAG(Directed Acyclic Graph,有向无环图)就是就是从计算角度来形容 RDD 转换逻辑。由 DAG 实现的数据流转能够通过节点示意 RDD 数据,通过 DAG 的连接线示意算子的操作。
依据 RDD 之间依赖关系的不同将 DAG 划分成不同的 Stage(调度阶段)。对于窄依赖,partition 的转换解决在一个 Stage 中实现计算。对于宽依赖,因为有 Shuffle 的存在,只能在 parent RDD 解决实现后,能力开始接下来的计算,因而宽依赖是划分 Stage 的根据。内存计算的由来本着缩小数据 IO 的目标,遵循“数据不动代码动”的准则。Spark Core 尊重数据分片的存储地位的偏好,尽可能将计算散发到本地计算节点去执行,从而缩小来源于数据传输带来的大幅开销,进而从整体上晋升了执行性能。为了实现这一目标,RDD 的 5 大外围属性别离从数据视角和计算视角来刻画数据模型的形象,任何分布式作业都能够通过 RDD 形象之间的转换来实现。实践上来说,如果计算节点的内存足够多,所有的 RDD 转换操作都能够放到内存中来执行。