摘要:介绍暗藏在华为云数据湖摸索服务背地的外围计算引擎Spark,玩转DLI,,轻松实现大数据的剖析解决。
本文次要给大家介绍暗藏在华为云数据湖摸索服务(后文简称DLI)背地的外围计算引擎——Spark。
DLI团队在Spark之上做了大量的性能优化与服务化革新,但其本质还是脱离不了Spark的外围概念与思维,因而笔者从以下几点论述,让读者疾速对Spark有一个直观的意识,玩转DLI。
Spark的诞生及劣势
2009年,Spark诞生于伯克利大学AMPLab,诞生之初是属于伯克利大学的研究性我的项目。于2010年开源,2013年成为Apache开源我的项目,通过几年的倒退逐步取代了Hadoop,成为了开源社区煊赫一时的大数据处理平台。
Spark官网的解释:“Spark是用于大规模数据处理的对立剖析引擎”,把关键词拆开来看,“大规模数据”指的是Spark的应用场景是大数据场景;“对立”次要体现在将大数据的编程模型进行了归一化,同时满足多种类型的大数据处理场景(批处理、流解决、机器学习等),升高学习和保护不同大数据引擎的老本;“剖析引擎”表明Spark聚焦在计算剖析,对标的是Hadoop中的MapReduce,对其模型进行优化与扩大。
Spark为了解决MapReduce模型的优化和扩大,那么咱们先探讨一下MapReduce存在的问题,而后剖析Spark在MapReduce之上的改良。
(1)MapReduce两头后果落盘,计算效率低下
随着业务数据一直增多,业务逻辑一直多样化,很多ETL和数据预处理的工作须要多个MapReduce作业能力实现,然而MapReduce作业之间的数据交换须要通过写入内部存储能力实现,这样会导致频繁地磁盘读写,升高作业执行效率。
Spark设计之初,就想要解决频繁落盘问题。Spark只在须要替换数据的Shuffle阶段(Shuffle中文翻译为“洗牌”,须要Shuffle的关键性起因是某种具备独特特色的数据须要最终汇聚到一个计算节点上进行计算)才会写磁盘,其它阶段,数据都是按流式的形式进行并行处理。
(2)编程模型繁多,场景表达能力无限
MapReduce模型只有Map和Reduce两个算子,计算场景的表达能力无限,这会导致用户在编写简单的逻辑(例如join)时,须要本人写关联的逻辑,如果逻辑写得不够高效,还会影响性能。
与MapReduce不同,Spark将所有的逻辑业务流程都形象成是对数据汇合的操作,并提供了丰盛的操作算子,如:join、sortBy、groupByKey等,用户只须要像编写单机程序一样去编写分布式程序,而不必关怀底层Spark是如何将对数据汇合的操作转换成分布式并行计算工作,极大的简化了编程模型
Spark的外围概念:RDD
Spark中最外围的概念是RDD(Resilient Distributed Dataset)——弹性分布式数据集,顾名思义,它是一个逻辑上对立、物理上散布的数据汇合,Spark通过对RDD的一系列转换操作来表白业务逻辑流程,就像数学中对一个向量的一系列函数转换。
Spark通过RDD的转换依赖关系生成对工作的调度执行的有向无环图,并通过任务调度器将工作提交到计算节点上执行,工作的划分与调度是对业务逻辑通明的,极大的简化了分布式编程模型,RDD也丰盛了分布式并行计算的表达能力。
RDD上的操作分为Transformation算子和Action算子。Transformation算子用于编写数据的变换过程,是指逻辑上组成变换过程。Action算子放在程序的最初一步,用于对后果进行操作,例如:将后果汇总到Driver端(collect)、将后果输入到HDFS(saveAsTextFile)等,这一步会真正地触发执行。
常见的Transformation算子包含:map、filter、groupByKey、join等,这外面又能够分为Shuffle算子和非Shuffle算子,Shuffle算子是指处理过程须要对数据进行从新散布的算子,如:groupByKey、join、sortBy等。常见的Action算子如:count、collect、saveAsTextFile等
如下是应用Spark编程模型编写经典的WordCount程序:
该程序通过RDD的算子对文本进行拆分、统计、汇总与输入。
Spark程序中波及到几个概念,Application、Job、Stage、Task。每一个用户写的程序对应于一个Application,每一个Action生成一个Job(默认蕴含一个Stage),每一个Shuffle算子生成一个新的Stage,每一个Stage中会有N个Task(N取决于数据量或用户指定值)。
Spark的架构设计
后面讲述了Spark 外围逻辑概念,那么Spark的工作是如何运行在分布式计算环境的呢?接下来咱们来看看开源框架Spark的架构设计。
(注:涂色示意过程)
Spark是典型的主从(Master- Worker)架构,Master 节点上常驻 Master守护过程,负责管理全副的 Worker 节点。Worker 节点上常驻 Worker 守护过程,负责与 Master 节点通信并治理 Executor。
(注:橙色和绿色示意过程)
Spark程序在客户端提交时,会在Application的过程中启动一个Driver。看一下官网对Driver的解释“The process running the main() function of the application and creating the SparkContext”。
咱们能够把Master和Worker看成是生产部总部老大(负责全局对立调度资源、协调生产工作)和生产局部部部长(负责调配、上报分部的资源,接管总部的命令,协调员工执行工作),把Driver和Executor看成是项目经理(负责分配任务和治理工作进度)和普通员工(负责执行工作、向项目经理汇报工作执行进度)。
项目经理D to 总部老大M:Hi,老大,我刚接了一个大我的项目,须要你告诉上面的分部部长W安顿一些员工组成联结工作小组。
总部老大M to 分部部长W:最近项目经理D接了一个大我的项目,你们几个部长都安顿几个员工,跟项目经理D一起组成一个联结工作小组。
分部部长W to 员工E:明天把大家叫到一起,是有个大我的项目须要各位配合项目经理D去一起实现,稍后会成立联结工作小组,工作的调配和进度都间接汇报给项目经理D。
项目经理D to 员工E:从明天开始,咱们会一起在这个联结工作小组工作一段时间,心愿咱们好好配合,把我的项目做好。好,当初开始分配任务…
员工E to 项目经理D:你调配的xxx工作已实现,请调配其它工作。
我的项目所有工作都实现后,项目经理D to 总部老大M:Hi,老大,我的项目所有的工作都曾经实现了,联结工作小组能够遣散了,感激老大的反对。
以上就是Spark的根本框架,基于Apache Spark/Flink生态,DLI提供了齐全托管的大数据处理剖析服务。借助DLI服务,你只须要关注利用的解决逻辑,提供构建好的利用程序包,就能够轻松实现你的大规模数据处理剖析工作,即开即用,按需计费。
华为云828企业上云节期间,购买数据湖摸索DLI优惠更多。
点击关注,第一工夫理解华为云陈腐技术~