数据湖探索DLI“三箭齐发”,关于数据分析的这些技术你了解吗?

举报
技术火炬手 发表于 2020/10/30 14:41:33 2020/10/30
【摘要】 关于数据分析的这些技术你了解吗?

在这个“信息爆炸”的时代,数据量增长迅速,各类应用对大数据处理的需求也发生着变化。

与此同时,“久经沙场”的数据仓库不再一统江湖,而以实时分析、离线分析、交互式分析等为代表的计算引擎势头迅猛

比如华为云于2017年发布的Serverless大数据分析服务——数据湖探索DLI。

经过多次迭代升级,DLI包含用于实时分析的Flink引擎,以及用于离线分析的Spark引擎。今年基于华为开源openLooKeng引擎的交互式分析功能,也将于Q4重磅发布,便于开发者构建轻量级流、批、交互式全场景数据湖。

何为Spark?

在讨论Spark的技术奥秘之前,先看一个现实生活中的案例。

程序员小张最近遇到一个棘手的问题,需要在双11前将公司近一年电商部门的营收和线下门店经营数据进行联合分析。

这将产生哪些数据难题呢?

 数据孤岛:电商部门的数据存在数仓A、门店经营收入数据存在数仓B,如何便捷的进行多仓联合分析?

 PB级数据量:多电商平台+全国线下门店每天将产生TB级数据量,年数据量高达PB级。

于是,他在第一时间联系了集团CTO,希望将各部门数据在一天内导出给他。

但CTO也犯难了:公司现有的资源池可自如应对TB级数据量,而小张要的数据量粗略估计达到了PB级,大大超出了公司现有资源池承受范围,只能以时间为代价导出;而为了不常见场景扩大公司资源池,整体的成本太高。

这个时候就要看DLI发挥作用了。

首先DLI是完全兼容Apache Spark和Apache Flink生态的Serverless大数据计算分析服务,用户仅需使用标准SQL或程序即可查询分析各类异构数据源。

其次,DLI支持云上多种云服务、自建数据库以及线下数据库,可直接实现多数据源跨库分析,构建统一视图。

所以,小张将线下数仓A与数仓B同时接入DLI,就可直接在DLI上进行联合查询,避免了两仓数据迁移再重新建仓进行联合查询的过程,轻松搞定跨库查询。

程序员小张的问题解决了,或许有人会疑惑,DLI是如何通过技术手段实现这些功能呢?

揭秘华为云DLI背后的核心计算引擎

为了达到良好的数据查询分析效果,DLI团队在Spark之上做了大量的性能优化与服务化改造,但其本质还是脱离不了Spark的核心概念与思想。

Spark是用于大规模数据处理的统一分析引擎,它诞生之初是为了解决MapReduce模型的优化和扩展。

比如Spark解决MapReduce频繁落盘问题,只在需要交换数据的Shuffle阶段才会写磁盘,其它阶段数据都是按流式的方式进行并行处理。

另外,与MapReduce不同的是,用户只需要像编写单机程序一样去编写分布式程序,不用关心底层Spark是如何将对数据集合的操作转换成分布式并行计算任务,极大的简化了编程模型。

  • Spark的核心

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程序: 

image.png

图:该程序通过RDD的算子对文本进行拆分、统计、汇总与输出

  • Spark的架构设计

前面讲述了Spark 核心逻辑概念,那么Spark的任务是如何运行在分布式计算环境的呢?接下来我们来看看开源框架Spark的架构设计。

Spark是典型的主从(Master- Worker)架构,Master节点上常驻Master守护进程,负责管理全部的Worker节点。Worker节点上常驻Worker守护进程,负责与Master节点通信并管理Executor。

image.png

(注:橙色和绿色表示进程)

Spark程序在客户端提交时,会在Application的进程中启动一个Driver。看一下官方对Driver的解释“The process running the main() function of the application and creating the SparkContext”。

我们可以把Master和Worker看成是生产部总部老大(负责全局统一调度资源、协调生产任务)和生产部分部部长(负责分配、上报分部的资源,接收总部的命令,协调员工执行任务),把Driver和Executor看成是项目经理(负责分配任务和管理任务进度)和普通员工(负责执行任务、向项目经理汇报任务执行进度)。

而华为云的DLI在开源Spark基础上进行了大量的性能优化与服务化改造,不仅兼容Apache Spark生态和接口,性能较开源提升了2.5倍,在小时级即可实现EB级数据查询分析。

开源openLooKeng,达成毫秒级查询技能

Spark之外,基于华为开源openLooKeng引擎的交互式分析功能,让DLI下的数据治理、使用更简单。

实时分析、离线分析、交互式分析这三种场景中在很多实际业务中都是同时存在的,DLI引入openLooKeng引擎之初就考虑了如何跟已有的Spark引擎进行元数据层面的互通,从而实现离线分析结果,免数据搬迁直接就可以用openLooKeng引擎进行交互式分析。Spark和openLooKeng都支持Hive的建表方式,通过这种方式,实现了元数据层面的互通。

除了支持融合场景的数据查询,openLooKeng关键特性如下:

1、毫秒级查询性能

openLooKeng使用了业界著名的开源SQL引擎Presto来提供交互式查询分析基础能力, DLI使用的openLooKeng引擎在内存计算框架的基础上,还利用许多查询优化技术来满足高性能毫秒级的交互式分析的需要

之所以能做到毫秒级查询性能,openLooKeng做了四个方面的优化:

1)索引

openLooKeng提供基于Bitmap Index、Bloom Filter以及Min-max Index等索引。通过在现有数据上创建索引,并且把索引结果存储在数据源外部,在查询计划编排时便利用索引信息过滤掉不匹配的文件,减少需要读取的数据规模,从而加速查询过程。

2)Cache

openLooKeng提供丰富多样的cache,包括元数据cache、执行计划cache、ORC行数据cache等。通过这些多样的cache,可加速用户多次对同一SQL或者同一类型SQL的查询时延响应。

3)动态过滤

所谓的动态过滤是指是在运行时(run time)将join一侧表的过滤信息的结果应用到另一侧表的过滤器的优化方法,openLooKeng不仅提供了多种数据源的动态过滤优化特性,还将这一优化特性应用到了DataCenter Connector,从而加速不同场景关联查询的性能。

4)算子下推

openLooKeng通过Connector框架连接到RDBMS等数据源时,由于RDBMS具有较强的计算能力,一般情况下将算子下推到数据源进行计算可以获取到更好的性能。openLooKeng目前支持多种数据源的算子下推,包括Oracle、HANA等,特别地,针对DC Connector也实现了算子下推,从而实现了更快的查询时延响应。

2、高可用

1)HA AA双活

openLooKeng引入了高可用的AA特性,支持coordinator AA双活机制,能够保持多个coordinator之间的负载均衡,同时也保证了openLooKeng在高并发下的可用性。

2) Auto-scaling

openLooKeng的弹性伸缩特性支持将正在执行任务的服务节点平稳退服,同时也能将处于不活跃状态的节点拉起并接受新的任务。openLooKeng通过提供“已隔离”与“隔离中”等状态接口供外部资源管理者(如Yarn、Kubernetes等)调用,从而实现对coordinator和worker节点的弹性扩缩容。

3、统一目录,跨域跨DC查询

DLI老用户使用比较多的功能是跨多种数据源的联合查询,用于更全面地对数据进行关联分析。openLooKeng引擎将跨源查询的能力进一步延伸,开发了跨域跨DC查询的DataCenter Connector。通过这个新Connector可以连接到远端另外的openLooKeng集群,从而提供在不同数据中心间协同计算的能力,其中的关键技术如下:

1)并行数据访问

worker可以并发访问数据源以提高访问效率,客户端也可以并发从服务端获取数据以加快数据获取速度。

2)数据压缩

在数据传输期间进行序列化之前,先使用GZIP压缩算法对数据进行压缩,以减少通过网络传输的数据量。

3) 跨DC动态过滤

过滤数据以减少从远端提取的数据量,从而确保网络稳定性并提高查询效率。

总而言之,加入交互式查询能力弥补了数据湖探索DLI在毫秒级场景下的短板,构建起从实时分析、到离线分析再到交互式分析整个链路完整的技术栈。

最后:

未来,DLI还将探索如何根据业务场景自动识别计算引擎,用户只需要下发SQL,无需关心最终的计算引擎,让大数据真正变成“像使用数据库一样”,“会SQL就会大数据分析”。

如果你也想体验DLI在大数据分析上的高效,现在只需1元即可体验华为云数据湖探索DLI,还能参与抽奖。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。