30分钟理解Spark的基本原理

文章发布于公号【数智物语】 (ID:decision_engine),关注公号不错过每一篇干货。

作者 | 梁云1991

转载自Python与算法之美(ID:Python_Ai_Road)

01

Spark优势特点

作为大数据计算框架 MapReduce 的继任者,Spark 具备以下优势特性。

01

高效性

不同于 MapReduce 将中间计算结果放入磁盘中,Spark 采用内存存储中间计算结果,减少了迭代运算的磁盘 IO,并通过并行计算 DAG 图的优化,减少了不同任务之间的依赖,降低了延迟等待时间。内存计算下,Spark 比 MapReduce 快 100 倍。

02

易用性

不同于 MapReduce 仅支持 Map 和 Reduce 两种编程算子,Spark 提供了超过 80 种不同的 Transformation 和 Action 算子,如map, reduce, filter, groupByKey, sortByKey, foreach 等,并且采用函数式编程风格,实现相同的功能需要的代码量极大缩小。

03

通用性

Spark 提供了统一的解决方案。Spark 可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。

这些不同类型的处理都可以在同一个应用中无缝使用。这对于企业应用来说,就可使用一个平台来进行不同的工程实现,减少了人力开发和平台部署成本。

04

兼容性

Spark 能够跟很多开源工程兼容使用。如 Spark 可以使用 Hadoop 的 YARN 和 Apache Mesos 作为它的资源管理和调度器,并且 Spark 可以读取多种数据源,如 HDFS、HBase、MySQL 等。

02

Spark基本概念

RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。

DAG:是 Directed Acyclic Graph(有向无环图)的简称,反映 RDD 之间的依赖关系。

Driver Program:控制程序,负责为 Application 构建 DAG 图。

Cluster Manager:集群资源管理中心,负责分配计算资源。

Worker Node:工作节点,负责完成具体计算。

Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行 Task,并为应用程序存储数据。

Application:用户编写的 Spark 应用程序,一个 Application 包含多个 Job。

Job:作业,一个 Job 包含多个 RDD 及作用于相应 RDD 上的各种操作。

Stage:阶段,是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”。

Task:任务,运行在 Executor 上的工作单元,是 Executor 中的一个线程。

总结:Application 由多个 Job 组成,Job 由多个 Stage 组成,Stage 由多个 Task 组成。Stage 是作业调度的基本单位。

03

Spark架构设计

Spark 集群由 Driver, Cluster Manager(Standalone, Yarn 或 Mesos),以及 Worker Node 组成。对于每个 Spark 应用程序,Worker Node 上存在一个 Executor 进程,Executor 进程中包括多个 Task 线程。

04

Spark运行流程

1,Application 首先被 Driver 构建 DAG 图并分解成 Stage。

2,然后 Driver 向 Cluster Manager 申请资源。

3,Cluster Manager 向某些 Work Node 发送征召信号。

4,被征召的 Work Node 启动 Executor 进程响应征召,并向 Driver 申请任务。

5,Driver 分配 Task 给 Work Node。

6,Executor 以 Stage 为单位执行 Task,期间 Driver 进行监控。

7,Driver 收到 Executor 任务完成的信号后向 Cluster Manager 发送注销信号。

8,Cluster Manager 向 Work Node 发送释放资源信号。

9,Work Node 对应 Executor 停止运行。

05

Spark部署模式

Local:本地运行模式,非分布式。

Standalone:使用 Spark 自带集群管理器,部署后只能运行 Spark 任务。

Yarn:Haoop 集群管理器,部署后可以同时运行 MapReduce,Spark,Storm,Hbase 等各种任务。

Mesos:与 Yarn 最大的不同是 Mesos 的资源分配是二次的,Mesos 负责分配一次,计算框架可以选择接受或者拒绝。

06

RDD数据结构

RDD 全称 Resilient Distributed Dataset,弹性分布式数据集,它是记录的只读分区集合,是 Spark 的基本数据结构。

RDD 代表一个不可变、可分区、里面的元素可并行计算的集合。

一般有两种方式可以创建 RDD,第一种是读取文件中的数据生成 RDD,第二种则是通过将内存中的对象并行化得到 RDD。

//通过读取文件生成RDD

valrdd = sc.textFile("hdfs://hans/data_warehouse/test/data")

//通过将内存中的对象并行化得到RDD

valnum= Array(1,2,3,4,5)

val rdd = sc.parallelize(num)

//或者 val rdd = sc.makeRDD(num)

创建 RDD 之后,可以使用各种操作对 RDD 进行编程。

RDD 的操作有两种类型,即 Transformation 操作和 Action 操作。转换操作是从已经存在的 RDD 创建一个新的 RDD,而行动操作是在 RDD 上进行计算后返回结果到 Driver。

Transformation 操作都具有 Lazy 特性,即 Spark 不会立刻进行实际的计算,只会记录执行的轨迹,只有触发 Action 操作的时候,它才会根据 DAG 图真正执行。

操作确定了 RDD 之间的依赖关系。

RDD 之间的依赖关系有两种类型,即窄依赖和宽依赖。窄依赖时,父 RDD 的分区和子 RDD 的分区的关系是一对一或者多对一的关系。而宽依赖时,父 RDD 的分区和子 RDD 的分区是一对多或者多对多的关系。

宽依赖关系相关的操作一般具有 shuffle 过程,即通过一个 Patitioner 函数将父 RDD 中每个分区上 key 不同的记录分发到不同的子 RDD 分区。

依赖关系确定了 DAG 切分成 Stage 的方式。

切割规则:从后往前,遇到宽依赖就切割 Stage。

RDD 之间的依赖关系形成一个 DAG 有向无环图,DAG 会提交给 DAGScheduler,DAGScheduler 会把 DAG 划分成相互依赖的多个 stage,划分 stage 的依据就是 RDD 之间的宽窄依赖。遇到宽依赖就划分 stage,每个 stage 包含一个或多个 task 任务。然后将这些 task 以 taskSet 的形式提交给 TaskScheduler 运行。

07

WordCount范例

只需要四行代码就可以完成 WordCount 词频统计。

valfile = sc.textFile("hello.txt")

valword = file.flatMap(_.split(","))

valwordOne = word.map((_,1))

wordOne.reduceByKey(_+_)

星标我,每天多一点智慧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容