spark点点滴滴 —— 基础原理和基本架构

概述

Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
spark 主要有三个特点:
- 高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身。
- Spark 很快,支持交互式计算和复杂算法。
- Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。

核心概念

RDD

rdd是spark中最核心的概念之一,是对数据的抽象封装,它表示已被分片(partition),不可变的并能够被并行操作的数据集合。

partition

  1. partion是弹性分布式数据集RDD的最小单元,RDD是由分布在各个节点上的partion组成的。
  2. partion是指的spark在计算过程中,生成的数据在计算空间内最小单元,同一份数据(RDD)的partion大小不一,数量不定,是根据application里的算子和最初读入的数据分块数量决定的。

其中,RDD和partition在分布式环境中对应关系如图:
这里写图片描述
图中,RDD 1有5个partition,分布在四台节点机器上,RDD 2有3个partition,分布在三台机器上。

RDD的操作

在spark中,RDD是不可变的,RDD也只能通过转换 从两种数据源中创建 RDD 1 )存储中的数据读取; 2 )其他 RDD转换而来。同时RDD提供两种不同类型的操作:转换(transformation)和动作 ( action )。
这两种不同的操作在spark的分布式计算中很重要,因为影响了spark任务的划分。因此,在实际应用中,我们应该好好考虑选择哪些操作。
目前,transformation包含一下一些操作:
这里写图片描述
action包含以下一些操作:
这里写图片描述

DAG与stage划分

宽依赖和窄依赖

我们知道spark的任务执行是延迟执行的,即只有action动作出现的时候,spark才开始真正的执行任务,而且是将一系列任务组织成有向无环图(DAG)然后开始执行。由于RDD是只读的,即通过另外一个RDD来产出,这就涉及到RDD之间的依赖关系,而RDD是划分为多个partition分布在不同机器上,为了提高执行效率,spark将这种依赖划分为宽依赖(wide dependency)和窄依赖(narrow dependency)。
RDD作为数据结构,本质上是一个只读的分区记录集合。一个RDD可以包含多个分区,每个分区就是一个dataset片段。RDD可以相互依赖。如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为narrow dependency;若多个Child RDD分区都可以依赖,则称之为wide dependency。不同的操作依据其特性,可能会产生不同的依赖。例如map操作会产生narrow dependency,而join操作则产生wide dependency。
依赖示例入下图:
这里写图片描述
父 RDD 的每个分区都只被子 RDD 的一个分区所使用,例如map、filter。相应的,那么宽依赖就是指父 RDD 的分区被多个子 RDD 的分区所依赖,例如groupByKey、reduceByKey等操作。如果父RDD的一个Partition被一个子RDD的Partition所使用就是窄依赖,否则的话就是宽依赖。

stage划分

spark将依赖划分为宽依赖和窄依赖原因可以理解有两点:
1. 运行效率,窄依赖可在同一个集群节点上执行,减少了节点间数据传输消耗,并且可以并行计算。
2. 故障恢复,narrow dependency的失败恢复更有效,因为它只需要重新计算丢失的分区即可。
同样,spark也是以宽依赖和窄依赖为分界点来划分stage的,比如下图就是划分为三个stage:
这里写图片描述

运行架构

我们知道,spark有三种运行模式,standalone模式,mesos模式和基于yarn的模式。
由于基于yarn模式的spark是我们最常使用的,因此我们介绍下基于yarn模式的spark提交任务的运行架构。
首先看执行架构图:
这里写图片描述
具体的模式网上有很多,大家可以自己看看。


【参考资料】Spark架构与作业执行流程简介
【参考资料】Spark RDD使用详解1–RDD原理
【参考资料】spark内核研究
【参考资料】Spark on YARN两种运行模式介绍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值