01数据仓库选型
数据仓库选型是整个数据中台项目的重中之重,是一切开发和应用的基础。而数据仓库的选型,其实就是Hive数仓和非Hive数仓的较量。Hive数仓以Hive为核心,搭建数据ETL流程,配合Kylin、Presto、HAWQ、Spark、ClickHouse等查询引擎完成数据的最终展现。而非Hive数仓则以Greenplum、Doris、GaussDB、HANA(基于SAP BW构建的数据仓库一般以HANA作为底层数据库)等支持分布式扩展的OLAP数据库为主,支持数据ETL加工和OLAP查询。
自从Facebook开源Hive以来,Hive逐渐占领了市场。Hive背靠Hadoop体系,基于HDFS的数据存储,安全稳定、读取高效,同时借助Yarn资源管理器和Spark计算引擎,可以很方便地扩展集规模,实现稳定地批处理。Hive数据仓库的优势在于可扩展性强,有大规模集的应用案例,受到广大架构师的推崇。
虽然Hive应用广泛,但是其缺点也是不容忽视的。
Hive的开源生态已经完全分化,各大互联网公司和云厂商都是基于早期的开源版本进行个性化修改以后投入生产使用的,很难再回到开源体系。Hive现在的3个版本方向1.2.x、2.1.x、3.1.x都有非常广泛的应用,无法形成合力。
开源社区发布的Hive版本过于粗糙,漏洞太多。最典型的就是Hive 3.1.0版本里面的Timestamp类型自动存储为格林尼治时间的问题,无论怎么调整参数和系统变量都不能解决。据HDP官方说明,需要升级到3.1.2版才能解决。根据笔者实际应用的情况,Hive 3.1.2版在大表关联时又偶尔出现inert overwrite数据丢失的情况。
Hive最影响查询性能的计算引擎也不能让人省心。Hive支持的查询引擎主要有MR、Spark、Tez。MR是一如既往的性能慢,升级到3.0版也没有任何提升。基于内存的Spark引擎性能有了大幅提升,3.x版本的稳定性虽然也有所
加强,但是对JDBC的支持还是比较弱。基于MR优化的Tez引擎虽然是集成最好的,但是需要根据Hadoop和Hive版本自行编译,部署和升级都十分复杂。
Hive对更新和删除操作的支持并不友好,导致在数据湖时代和实时数仓时代被迅速抛弃。
Hive的查询引擎也很难让用户满意,最典型的就是以下查询引擎。
1)Spark支持SQL查询,需要启动Thrift Server,表现不稳定,查询速度一般为几秒到几分钟。
2)Impala是CDH公司推出的产品,一般用在CDH平台中,查询速度比Spark快,由于是C++开发的,因此非CDH平台安装Impala比较困难。
3)Presto和Hive一样,也是Facebook开源的,语法不兼容Hive,查询速度一般为几秒到几分钟。
4)Kylin是国人开源的MOLAP软件,基于Spark引擎对Hive数据做预算并保存在Hbase或其他存储中,查询速度非常快并且稳定,一般在10s以下。但是模型构建复杂,使用和运维都不太方便。
5)ClickHouse是目前最火的OLAP查询软件,特点是查询速度快,集成了各大数据库的精华引擎,独立于Hadoop平台,需要把Hive数据同步迁移过去,提供有限的SQL支持,几乎不支持关联操作。
以Hadoop为核心的Hive数据仓库的颓势已经是无法扭转的了,MapReduce 早已被市场抛弃,HDFS在各大云平台也已经逐步被对象存储替代,Yarn被Kubernetes替代也是早晚的事。
greenplum数据库我们把视野扩展到Hive体系以外,就会发现MPP架构的分布式数据库正在蓬勃发展,大有取代Hive数仓的趋势。
其中技术最成熟、生态最完善的当属Greenplum体系。Greenplum自2015年开源以来,经历了4.x、5.x、6.x三个大版本的升级,功能已经非常全面和稳定了,也受到市场的广泛推崇。基于Greenplum提供商业版本的,除了研发Greenplum的母公司Pivotal,还有中国本地团队的创业公司四维纵横。此外,还有阿里云提供的云数据库AnalyticDB for PostgreSQL、百度云FusionDB和京东云提供的JDW,都是基于Greenplum进行云化的产品。华为的GaussDB在设计中也参考了Greenplum数据库。
OLAP查询性能最强悍的当属SAP商业数据库HANA,这是数据库领域当之无愧的王者。HANA是一个软硬件结合体,提供高性能的数据查询功能,用户可以直接对大量实时业务数据进行查询和分析。
HANA唯一的缺点就是太贵,软件和硬件成本高昂。HANA是一个基于列式存储的内存数据库,主要具有以下优势。
▪把数据保存在内存中,通过对比我们发现,内存的访问速度比磁盘快1000000倍,比SSD和闪存快1000倍。传统磁盘读取时间是5ms,内存读取时间是5ns。
▪服务器采用多核架构(每个刀片8×8核心CPU),多刀片大规模并行扩展,刀片服务器价格低廉,采用64位地址空间—单台服务器容量为2TB,
100GB/s的数据吞吐量,价格迅速下降,性能迅速提升。
▪数据存储可以选择行存储或者列存储,同时对数据进行压缩。SAP HANA采用数据字典的方法对数据进行压缩,用整数代表相应的文本,数据库可以进一步压缩数据和减少数据传输。
百度开源的Doris也在迎头赶上,并且在百度云中提供云原生部署。Apache Doris是一款架构领先的MPP分析型数据库产品,仅须亚秒级响应时间即可获得查询结果,高效支持实时数据和批处理数据。Apache Doris的分布式架构非常简洁,易于运维,并且支持10PB以上的超大数据集,可以满足多种数
据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。Apache Doris支持AGGREGATE、UNIQUE、DUPLICATE 三种表模型,同时支持ROLLUP和MATERIALIZED VIEW两种向上聚合方式,可以更好地支撑OLAP查询请求。另外,Doris也支持快速插入和删除数据,是未来实时数仓或者数据湖产品的有力竞争者。
尝试在OLTP的基础上融合OLAP的数据库TiDB、腾讯TBase(云平台上已改名为TDSQL PostgreSQL版)、阿里的OceanBase都在架构上做了大胆的突破。TiDB采用行存储、列存储两种数据格式各保存一份数据的方式,分别支持快速OLTP交易和OLAP查询。TBase则是分别针对OLAP业务和OLTP业务设置不同的计算引擎和数据服务接口,满足HTAP场景应用需求。OceanBase数据库使用基于LSM-Tree的存储引擎,能够有效地对数据进行压缩,并且不影响性能,可以降低用户的存储成本。
02ETL工具选型
目前,业界比较领先的开源ETL数据抽取工具主要有Kettle、DataX和Waterdrop。商业版本的DataStage、Informatica和Data Services三款软件不仅配置复杂、开发效率低,执行大数据加载也非常慢。
Kettle(正式名为Pentaho Data Integration)是一款基于Java开发的开源ETL工具,具有图形化界面,可以以工作流的形式流转,有效减少研发工作量,提高工作效率。Kettle支持不同来源的数据,包括不
同数据库、
Excel/CSV等文件、邮件、网站爬虫等。除了数据的抽取与转换,还支持文件操作、收发邮件等,通过图形化界面来创建、设计转换和工作流任务。
DataX是阿里巴巴集团内部广泛使用的离线数据同步工具/平台,实现包括MySQL、Oracle、SQL Server、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute (ODPS)、DRDS等各种异构数据源之间高效的数据同步功能。
Waterdrop是一款易用、高性能、支持实时流式和离线批处理的海量数据处理工具,程序运行在Apache Spark和Apache Flink之上。Waterdrop简单易用、灵活配置、无需开发,可运行在单机、Spark Standalone集、Yarn集、Mesos集之上。Waterdrop支持实时流式处理,拥有高性能、海量数据
处理能力,支持模块化和插件化,易于扩展。用户可根据需要来扩展插件,支持Java/Scala实现的Input、Filter、Output插件。
总的来说,Kettle适合中小企业ETL任务比较少并且单表数据量在百万以下的项目,开发速度快,支持的数据来源丰富,方便快速达成项目目标。DataX 支持需要批处理抽取数据的项目,支持千万级、亿
级数据的快速同步,性能高效、运维稳定。Waterdrop是后起之秀,在DataX的基础上还支持流式数据处理,是DataX的有力竞争者和潜在替代产品。
03调度平台选型
调度平台可以串联ETL任务并按照指定的依赖和顺序自动执行。调度平台一般用Java语言开发,平台实现难度小,大多数数据仓库实时厂商都有自研的调度平台。
在早期银行业的数据仓库项目中,大多数据ETL过程都是通过DataStage、Informatica或者存储过程实现的。笔者接触过最好用的产品就是先进数通公司的Moia Control。Moia Control定位于企业统一调度管理平台,致力于为企业的批处理作业制定统一的开发规范、运维方法,对各系统的批量作业进行统一管理、调度和监控。Moia Control的系统架构如
图1所示,系统分为管理节点和Agent节点,管理节点负责调度任务的配置和分发作业,Agent节点负责任务的执行和监控。Moia Control在金融领域具有非常广泛的应用。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。