共计 4576 个字符,预计需要花费 12 分钟才能阅读完成。
作者:韩信子 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/84
本文地址:http://www.showmeai.tech/article-detail/173
申明:版权所有,转载请分割平台与作者并注明出处
1.Spark 是什么
学习或做大数据开发的同学,都据说或者应用过 Spark,从这部分开始,ShowMeAI 带大家一起来学习一下 Spark 相干的常识。
Apache Spark 是一种用于大数据工作负载的分布式开源解决零碎。它应用内存中缓存和优化的查问执行形式,可针对任何规模的数据进行疾速剖析查问。Spark 基于内存计算,进步了在大数据环境下数据处理的实时性,同时保障了高容错性和高可伸缩性,容许用户将 Spark 部署在大量的便宜硬件之上,造成集群。
Spark 提供应用 Java、Scala、Python 和 R 语言的开发 API,反对跨多个工作负载重用代码—批处理、交互式查问、实时剖析、机器学习和图形处理等。Apache Spark 曾经成为最受欢迎的大数据分布式解决框架之一。
- 《更多材料 → 数据迷信工具速查 | Spark 使用指南 (RDD 版)》
- 《更多材料 → 数据迷信工具速查 | Spark 使用指南 (SQL 版)》
2.Spark 的特点
Apache Spark 是个开源和兼容 Hadoop 的集群计算平台。由加州大学伯克利分校的 AMPLabs 开发,作为 Berkeley Data Analytics Stack(BDAS)的一部分,当下由大数据公司 Databricks 保驾护航,更是 Apache 旗下的顶级我的项目。
1)Apache Spark 堆栈中的不同组件
2)Apache Spark 的劣势
- 更高的性能 :因为数据被加载到集群主机的分布式内存中。数据能够被疾速的转换迭代,并缓存用以后续的频繁拜访需要。在数据全副加载到内存的状况下,Spark 有时能达到比 Hadoop 快 100 倍的数据处理速度,即便内存不够寄存所有数据的状况也能快 Hadoop 10 倍。
- 宽泛的反对与易用性 :通过建设在 Java、Scala、Python、SQL(应答交互式查问)的规范 API 以不便各行各业应用,同时还含有大量开箱即用的机器学习库。
- 多场景通用性 :Spark 集成了一系列的库,包含 SQL 和 DataFrame 帮忙你疾速实现数据处理;Mllib 帮忙你实现机器学习工作;Spark streaming 做流式计算。
- 多平台反对 :Spark 能够跑在 Hadoop、Apache Mesos、Kubernetes 等之上,能够从 HDFS、Alluxio、Apache Cassandra、Apache Hive 以及其余的上百个数据源获取数据。
3.Spark 作业与调度
Spark 的外围是作业和任务调度零碎,它能够保障各种工作高效残缺地运行。
1)Spark 作业和任务调度零碎
Spark 通过作业和任务调度零碎,可能无效地进行调度实现各种工作,底层的奇妙设计是对工作划分 DAG 和容错,使得它对低层到顶层的各个模块之间的调用和解决显得熟能生巧。
2)基本概念一览
概念 | 解释 |
---|---|
作业(Job) | RDD 中由口头操作所生成的一个或多个调度阶段。 |
调度阶段(Stage) | 每个 Job 作业会因为 RDD 之间的依赖关系拆分成多组工作汇合,称为调度阶段,简称阶段,也叫做工作集(TaskSet)。调度阶段的划分是由 DAGScheduler(DAG 调度器)来划分的。调度阶段有 Shuffle Map Stage 和 Result Stage 两种。 |
工作(Task) | 散发到 Executor 上的工作工作,是 Spark 理论执行利用的最小单元。Task 会对 RDD 的 partition 数据执行指定的算子操作,比方 flatMap、map、reduce 等算子操作,造成新 RDD 的 partition。 |
DAGScheduler(DAG 调度器) | DAGScheduler 是面向 Stage(阶段)的任务调度器,负责接管 Spark 利用提交的作业,依据 RDD 的依赖关系划分调度阶段,并提交 Stage(阶段)给 TaskScheduler。 |
TaskScheduler(任务调度器) | TaskScheduler 是面向工作的调度器,它接管 DAGScheduler 提交过去的 Stage(阶段),而后把工作散发到 Worker 节点运行,由 Worker 节点的 Executor 来运行该工作。 |
3)Spark 作业和调度流程
Spark 的作业调度次要是指基于 RDD 的一系列操作形成一个作业,而后在 Executor 中执行。这些操作算子次要分为转换操作和口头操作,对于转换操作的计算是 lazy 级别的,也就是提早执行,只有呈现了口头操作才触发作业的提交。
在 Spark 调度中最重要的是 DAGScheduler 和 TaskScheduler 两个调度器:其中 DAGScheduler 负责工作的逻辑调度,将 Job 作业拆分成不同阶段的具备依赖关系的工作集,而 TaskScheduler 则负责具体任务的调度执行。
4.RDD / DataFrame 与 Dataset
1)Spark API 的历史
Apache Spark 中有 RDD,DataFrame 和 Dataset 三种不同数据 API,倒退如下:
RDD:
- RDD 是 Spark 最早提供的面向用户的次要 API。
- 从根本上来说,一个 RDD 就是数据的一个不可变的分布式元素汇合,在集群中跨节点散布,能够通过若干提供了转换和解决的底层 API 进行并行处理。
DataFrame:
- 与 RDD 类似,DataFrame 也是数据的一个不可变分布式汇合。
- 但与 RDD 不同的是,数据都被组织到有名字的列中,就像关系型数据库中的表一样。
- 设计 DataFrame 的目标就是要让对大型数据集的解决变得更简略,它让开发者能够为分布式的数据集指定一个模式,进行更高层次的形象。它提供了特定畛域内专用的 API 来解决你的分布式数据,并让更多的人能够更不便地应用 Spark,而不仅限于业余的数据工程师。
Dataset:
- 从 Spark 2.0 开始,Dataset 开始具备两种不同类型的 API 特色:有明确类型的 API 和无类型的 API。
- 从概念上来说,能够把 DataFrame 当作一些通用对象 Dataset[Row] 的汇合的一个别名,而一行就是一个通用的无类型的 JVM 对象。
- 与之造成比照,Dataset 就是一些有明确类型定义的 JVM 对象的汇合,通过你在 Scala 中定义的 Case Class 或者 Java 中的 Class 来指定。
2)Spark API 简介
在 Spark 2.0 中对 Dataframe 和 Dataset 进行了对立,如下图所示:
3)Spark 的逻辑构造
Spark 的整体逻辑构造如下图所示,蕴含不同的层级及组成部分:
5.Spark2.0 与 SparkSession
1)SparkSession 的引入
Spark2.0 中引入了 SparkSession 的概念,它为用户提供了一个对立的切入点来应用 Spark 的各项性能,借助 SparkSession,咱们能够应用 DataFrame 和 Dataset 的各种 API,利用 Spark 的难度也大大降落。
在 Spark 的晚期版本,SparkContext 是进入 Spark 的切入点,RDD 数据基于其创立。但在流解决、SQL 等场景下有其余的切入点,汇总如下:
- RDD,创立和操作应用 SparkContext 提供的 API。
- 流解决,应用 StreamingContext。
- SQL,应用 sqlContext。
- Hive,应用 HiveContext。
在 Spark 高版本中,DataSet 和 DataFrame 提供的 API 逐步成为新的规范 API,须要一个切入点来构建它们。所以,Spark 2.0 引入了一个新的切入点 (entry point):SparkSession。
- SparkSession 本质上是 SQLContext 和 HiveContext 的组合(将来可能还会加上 StreamingContext)。
- 在 SQLContext 和 HiveContext 上可用的 API,在 SparkSession 上同样能够应用。
- SparkSession 外部封装了 SparkContext,计算实际上由 SparkContext 实现。
2)创立 SparkSession
6. 结构化流与连续性利用
1)Continuous Applications
Spark2.0 中提出一个概念,Continuous Applications(间断应用程序)。
Spark Streaming 等流式解决引擎,致力于流式数据的运算:比方通过 map 运行一个办法来扭转流中的每一条记录,通过 reduce 能够基于工夫做数据聚合。然而很少有只在流式数据上做运算的需要,流式解决往往是一个大型利用的一部分。
Continuous Applications 提出后,实时运算作为一部分,不同零碎间的交互等也能够由 Structured Streaming 来解决。
2)Structured Streaming
Structured Streaming 是一个建设在 Spark Sql 引擎上的可扩大、高容错的流式解决引擎。它使得能够像对静态数据进行批量解决一样来解决流式数据。
7. 参考资料
- 数据迷信工具速查 | Spark 使用指南 (RDD 版) http://www.showmeai.tech/article-detail/106
- 数据迷信工具速查 | Spark 使用指南 (SQL 版) http://www.showmeai.tech/article-detail/107
- 张安站著,《Spark 技术底细》,人民邮电机械工业出版社,2015
- Tomasz Drabas / Denny Lee 著,《Learning PySpark》,2017
- Spark 基本概念疾速入门,https://www.jianshu.com/p/e41b18a7e202
- Spark 编程指南,http://spark.apachecn.org/docs/cn/2-2).0/rdd-programming-guide.html
ShowMeAI 相干文章举荐
- 图解大数据 | 导论:大数据生态与利用
- 图解大数据 | 分布式平台:Hadoop 与 Map-reduce 详解
- 图解大数据 | 实操案例:Hadoop 零碎搭建与环境配置
- 图解大数据 | 实操案例:利用 map-reduce 进行大数据统计
- 图解大数据 | 实操案例:Hive 搭建与利用案例
- 图解大数据 | 海量数据库与查问:Hive 与 HBase 详解
- 图解大数据 | 大数据分析开掘框架:Spark 初步
- 图解大数据 | Spark 操作:基于 RDD 的大数据处理剖析
- 图解大数据 | Spark 操作:基于 Dataframe 与 SQL 的大数据处理剖析
- 图解大数据 | 综合案例:应用 spark 剖析美国新冠肺炎疫情数据
- 图解大数据 | 综合案例:应用 Spark 剖析开掘批发交易数据
- 图解大数据 | 综合案例:应用 Spark 剖析开掘音乐专辑数据
- 图解大数据 | 流式数据处理:Spark Streaming
- 图解大数据 | Spark 机器学习 (上)- 工作流与特色工程
- 图解大数据 | Spark 机器学习 (下)- 建模与超参调优
- 图解大数据 | Spark GraphFrames:基于图的数据分析开掘
ShowMeAI 系列教程举荐
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程