作者:韩信子@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数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程