关于dlib:技术揭秘华为云DLI背后的核心计算引擎

3次阅读

共计 2984 个字符,预计需要花费 8 分钟才能阅读完成。

摘要: 介绍暗藏在华为云数据湖摸索服务背地的外围计算引擎 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 优惠更多。

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0