探索BI系统搭建的必要性与AI技术的应用潜力
892
2022-05-29
在这个“信息爆炸”的时代,数据量增长迅速,各类应用对大数据处理的需求也发生着变化。
与此同时,“久经沙场”的数据仓库不再一统江湖,而以实时分析、离线分析、交互式分析等为代表的计算引擎势头迅猛。
比如华为云于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程序:
图:该程序通过RDD的算子对文本进行拆分、统计、汇总与输出
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看成是项目经理(负责分配任务和管理任务进度)和普通员工(负责执行任务、向项目经理汇报任务执行进度)。
而华为云的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,还能参与抽奖。
数据湖探索 DLI
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。