这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!
另外,博主出书了《Hadoop大数据挖掘从入门到进阶实战》,喜欢的朋友或同学, 可以在公告栏那里点击购买链接购买博主的书进行学习,在此感谢大家的支持。
Clickhouse是一个开源的列式存储数据库,其主要场景用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。今天,笔者就为大家介绍如何使用Clickhouse来构建实时数仓,来满足一些实时性要求较高的使用场景。
在介绍Clickhouse构建实时数仓之前,我们先来了解一下OLAP的使用场景,通常OLAP的使用场景包含如下特征:
通过观察这些特征,我们可以看出,对于OLAP场景与其他业务场景(比如OLTP、KV等)有所不同,因此想要使用OLTP或者KV来高效的处理数据分析查询场景,并不是非常完美的解决方案。
Clickhouse更适合OLAP场景,对于大多数查询而言,处理速度至少提高了100倍,下面我们可以通过图片来详细了解其中的原因:
接下来,给大家分析一下这2张图发生了什么。
例如,查询 “统计每个广告平台的记录数量” 需要读取 “广告平台ID” 这一列,它在未压缩的情况下需要 1 个字节进行存储。如果大部分流量不是来自广告平台,那么这一列至少可以以 10 倍的压缩率被压缩。当采用快速压缩算法,它的解压速度至少在 10 亿字节(未压缩数据)每秒。换而言之,这个查询可以在单个服务器上以每秒大约几十亿行的速度进行处理。这实际上是当前实现的速度。
由于执行一个查询需要处理大量的行,因此在整个向量上执行所有操作将比在每一行执行所有操作更加高效。同时,这将有助于实现一个几乎没有调用成本的查询引擎。如果你不这样来操作,使用任何一个机械硬盘,查询引擎都不可避免的停止CPU进行等待。所以,在数据按列存储并且按列执行是很有意义的。
这里有两种方法可以来实现这一点,它们分别是:
这是不应该在一个通用数据库中实现的,因为这在运行简单查询时是没有意义的。但是也有例外,比如,MemSQL使用代码生成来减少处理SQL查询的延迟(这里只是为了比较,分析型数据库通常需要优化的是吞吐而不是延迟)。
这里需要注意,为了提高CPU效率,查询语言必须是声明型的(SQL或者MDX),或者至少一个向量(J,K)。查询应该只包含隐式循环,允许进行优化。
一般来说,使用Clickhouse构建实时数仓的场景,主要包含如下:
在上述场景中,使用者都非常看重实时性,希望查询响应速度快。
在引入Clickhouse之前,我们通常使用主流的Hadoop生态来构建数仓,但是,Hadoop生态构建的数仓会有些痛点:
经过对业界的主流技术进行调研对比,使用Clickhouse作为OLAP的主要核心引擎,其原因如下:
在使用原生Clickhouse时,在数据流量增大时会有很多问题:
想要比较好的解决Clickhouse的易用性和稳定性,需要生态来支撑,整体的生态方案有以下几个重要部分,它们分别是:
基于Clickhouse生态建设,有以下几个典型的应用场景:
由于数据探索是随机的,很难通过预构建的方式来解决,如果使用Hadoop的生态只能实现小时到分钟的级别。在引入Clickhouse后,在单表千亿级别的数据量下,大多数查询都是很快的,对于数据分析师来说是非常友好的。
使用Hadoop生态做 A/B 实验的时候,前一天要把所有的实验数据统计出来,做好预聚合。第二天才能查询实验效果。使用Clickhouse来做实时JOIN,效果非常的好。
虽然实时特征计算不是Clickhouse的强项,但是通过相关优化,还是可以实现。
Clickhouse OLAP的生态相对于Hadoop生态,性能提升是比较明显的,通过流批一体提供更加稳定可靠的服务,使得业务决策更加迅速,实验结论更加准确。
这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!
另外,博主出书了《Hadoop大数据挖掘从入门到进阶实战》,喜欢的朋友或同学, 可以在公告栏那里点击购买链接购买博主的书进行学习,在此感谢大家的支持。