前 言
从Bill Inmon在1991年提出数据仓库的概念起,至今已有三十年的时间。在这期间人们所面对的数据,以及处理数据的方法都发生了翻天覆地的变化。起初数据仓库系统运行在单机或小型集群之上,程序以批处理方式周期性运行ETL作业。最为常见的执行方式是在每天业务低峰期处理前一天产生的业务数据,即所谓的T+1模式。后来随着互联网和移动终端等应用的普及,需要处理的数据量不断增大,出现了大数据的概念,以Hadoop及其生态圈组件为代表的新一代分布式大数据处理平台逐渐流行。近年来随着业务领域的不断拓展,人们对数据分析的实时性要求越来越高,离线批处理方式所产生的延时已不能满足需求。以Hadoop为代表的分布式框架并没有给出实时计算解决方案,于是便出现了Storm、Spark Streaming、Flink等实时计算框架,可提供秒级的响应时间,在此基础上实时数据仓库应运而生。
作为DBA,我更倾向于采用一种不编程、组件少、门槛低、易上手、纯SQL,并能处理包含历史全量数据的方案,用来实现实时数据仓库。不可否认,SQL仍然是数据库、数据仓库中最常使用的开发语言,也是传统数据库工程师或DBA的必会语言,从它出现至今一直被广泛使用。首先,SQL有坚实的关系代数作为理论基础,经过几十年的积累,查询优化器已经相当成熟。再者,对于开发者,SQL作为典型的非过程语言,其语法相对简单,但语义却相当丰富。据统计95%的数据分析问题都能用SQL解决,这是一个相当惊人的结论。
本书介绍的实现方案能满足以上所有要求,涉及的具体技术包括:MySQL主从复制,保证为业务系统提供可靠的数据库服务,并提供数据来源;Canal Server实时获取增量MySQL binlog,并将其传入Kafka消息队列;Kafka将消息持久化,同时提供可伸缩、高吞吐的消息服务;Canal ClientAdapter负责消费Kafka中的消息,将数据流传输到Greenplum数据库;Greenplum作为数据仓库系统,提供实时ETL功能,自动维护操作数据存储(ODS)、维度表与事实表。
Greenplum分布式数据库采用无共享(Shared-Nothing)的大规模并行处理(MPP)架构,能充分利用集群的硬件资源,将并行处理发挥到极致。Greenplum具有可选存储模式、事务支持、并行查询与数据装载、容错与故障转移、数据库统计、过程化语言扩展等方面的功能特性,正是它们支撑Greenplum成为一款理想的分析型数据库产品。
本书内容
全书共分10章。第1章说明数据仓库相关的基本概念,包括数据仓库定义、操作型系统与分析型系统、ETL、数据仓库架构等。第2章介绍三种主流的数据仓库设计模型,即关系数据模型、维度数据模型和DATA VAULT模型。第3章介绍Greenplum系统架构、功能特性、主要优缺点,以及为何适用于数据仓库应用。第4章详解Greenplum的安装部署问题。第5章介绍实时数据同步的实现,包括MySQL数据复制在实时数据仓库架构中所起的作用,如何使用Kafaka,以及Maxwell + Kafka + Bireme和Canal Server + Kafka + Canal ClientAdapter两种具体实现。第6章用一个销售订单示例说明如何使用Greenplum的规则(rule)实现实时自动数据装载。第7章和第8章分别详解多维数据仓库中常见的维度表和事实表技术,及其在Greenplum中的实现。第9章介绍Greenplum主要的、例行的与推荐的运维与监控工作。第10章作为完整数据分析体系的组成部分,介绍如何在Greenplum中集成MADlib,实现基于SQL的机器学习。
读者对象
本书所定位的读者是大数据分析系统设计和开发、数据仓库系统设计和开发、DBA、架构师等相关技术人员。所有的描绘场景与实验环境都基于Linux操作系统。假设读者已具有一定的数据库、数据仓库、SQL与Linux基础。
源码下载
本书配套的源码,需要使用微信扫描下面二维码获取,可按扫描后的页面提示,把下载链接转发到自己的邮箱中下载。如果发现问题或疑问,请用电子邮件联系booksaga@163.com,邮件主题为“Greenplum构建实时数据仓库实践”。
致谢
在本书编写过程中,得到了很多人的帮助与支持。首先,感谢我所在的公司——优贝在线提供的平台和环境,感谢同事们在工作中的鼎力相助。没有那里的环境和团队,也就不会有这本书。其次,感谢清华大学出版社图格事业部的老师和编辑们,他们的辛勤工作使得本书得以尽早与读者见面。再次,感谢CSDN提供的技术分享平台,给我有一个将博客文章整理成书的机会。最后,感谢家人对我一如既往的支持。
由于水平有限,书中疏漏之处在所难免,希望读者批评指正。
编 者
2022年22022年5月