摘要:本文是我们对clickhouse做了最简单的支持obs的适配改造。

本文分享自华为云社区《clickhouse存算分离在华为云实践》,作者: he lifu。

clickhouse是一款非常优秀的OLAP数据库系统,2016年刚开源的时候就因为卓越的性能表现得到大家的关注,而近两年国内互联网公司的大规模应用和推广,使得它在业内声名鹊起,且受到了大家一致的认可。

从网络上公开分享的资料和客户使用的案例总结来看,clickhouse主要是应用在实时数仓离线加速两个场景,其中有些实时业务为了追求极致的性能会上全SSD的配置,考虑到实时数据集的有限规模,这种成本尚能够接受,但是对于离线加速的业务,数据集普遍会很大,这个时候上全SSD配置的成本就会显得昂贵了,有没有办法既能满足较高的性能又能把成本控制的尽量低?我们的想法是弹性伸缩,把数据存储到低廉的对象存储上面,通过动态增加计算资源的方式满足高频时段的高性能需求,通过回收计算资源的方式控制低频时段的成本,所以我们把目标放在了存算分离这个特性上。

一.存算分离现状

clickhouse是存算一体的数据库系统,数据是直接落在本地磁盘上(包括云硬盘),关注社区动态的读者已经知道最新的版本可以支持数据持久化到对象存储和HDFS上了,以下是我们对clickhouse做了最简单的支持obs的适配改造,和原生的支持S3一样:

1.配置S3磁盘

2.创建表并灌入数据

3.检查本地盘数据

4.检查对象存储数据

从上面几个图片来看, 可以发现本地磁盘上的数据文件内容记录了obs上的文件名(uuid),也就是说clickhouse和obs对象之间是通过本地数据文件中的“映射”关系关联起来的,注意这个“映射”关系是持久化在本地的,意味着需要冗余以满足可靠性。

然后进一步,我们看到社区也在努力把clickhouse往存算分离的方向推进:

  • v21.3版本引入的Add the ability to backup/restore metadata files for DiskS3,允许把本地数据文件到obs对象的映射关系、本地数据的目录结构等属性,放到obs对象的属性里(object的metadata),这样解耦了数据目录必须在本地的限制,也解除了维持映射关系的本地文件可靠性而至少双副本的条件;
  • v21.4版本引入的S3 zero copy replication,使得多个副本间可以共享一份远端数据,显著的降低了存算一体引擎多副本存储的开销。

但事实上,通过验证测试可以发现当前阶段存算分离距离可以上生产还有很长路要走,比如:atomic库下的表怎么搬到对象存储上(表定义sql文件中标识唯一性的UUID和数据目录UUID的对应关系)、弹性扩缩容时候如何快速有效均衡数据(拷贝数据会极大拉长操作窗口)、修改本地磁盘文件和远端对象如何保障一致性、节点宕机如何快速恢复等等棘手的问题。

二.我们的实践

在云原生的时代,存算分离是趋势也是我们的工作方向,接下来的讨论将围绕华为公有云对象存储obs来展开。

1.引入文件语义

这里需要重点强调下华为云对象存储obs和其他竞品的最大差异化点:obs支持文件语义,支持文件和文件夹的rename操作。这点对于我们在接下来的系统设计和弹性伸缩实现上非常有价值,所以我们把obs的驱动集成进了clickhouse,然后修改了clickhouse的逻辑,这样数据在obs上长的和本地一模一样了:

Local Disk:

OBS:

有了完整的数据目录结构后,再支持merge、detach、attach、mutate以及part回收等操作就比较方便了。

2.离线场景

From bottom to top,我们再来看系统结构,离线加速场景中去除了对zookeeper的依赖,每个shard一个replica:

然后是扩缩容节点时候的数据均衡功能,通过obs的rename操作完成对part级别的低成本移动(和clickhouse copier工具的数据重新分发均衡不一样),节点宕机后新节点从对象存储侧构造出本地数据文件目录。

3.融合场景

ok,在上面离线场景的基础上我们继续融入实时场景(下图中的“实时集群”部分),不同业务的clickhouse集群,可以通过冷热分离分层存储的方式(这一功能相对比较成熟,业内普遍采用它来降低存储成本),把冷数据从实时集群里淘汰出来,再通过obs rename操作挂载到“离线集群”中,这样我们可以覆盖数据从实时到离线的完整的生命周期(包括从hive到clickhouse的ETL过程):

三.未来的展望

前面的实践是我们在存算分离方向的第一次尝试,还在不断的改进优化中,从宏观的角度来看仍旧是把obs作为拉远了的磁盘来使用,不过感谢obs的高吞吐,相同计算资源的前提下SSD和obs跑Star Schema Benchmark的性能延迟在5x左右,但是存储成本得到了显著的降低10x。未来,我们会在前面工作的基础上,去除obs作为拉远磁盘的属性,把单个表的数据统一在一个数据目录下,收编clickhouse的元数据,把它做成无状态的计算节点,达到sql on hadoop的效果,类似impala一样的MPP数据库。

点击关注,第一时间了解华为云新鲜技术~

解读clickhouse存算分离在华为云实践相关推荐

  1. 大数据上云存算分离演进思考与实践

    作者:汤祯捷 阿里云智能计算平台团队 存算分离.数据湖.在离线混部,这些名词越来越多的出现在各行各业数字化转型的关键活动中.本文仅从大数据产品商业化从业者的视角来探讨与分析大数据领域的存算分离演进过程 ...

  2. 华为云FusionInsight MRS在金融行业存算分离的实践

    摘要:华为云FusionInsight MRS的大数据存算分离解决方案,实现资源价值最大化,存储与计算资源全面云化.灵活配置.弹性伸缩,降本增效. 在大数据.云计算.5G.AI等技术日新月异,数字经济 ...

  3. GaussDB(for Redis)揭秘:Redis存算分离架构最全解析

    前言: 本文根据华为云NoSQL数据库架构师余汶龙,在今年的中国系统架构师大会SACC上的演讲整理而成,内容如下. 本次分享的大纲分成如下四个部分: 什么是GaussDB(for Redis)? 为什 ...

  4. 聊聊大数据的存算分离

    导读:大数据集群从最初开始建设时,一般都采用存算一体化的架构,主要是考虑部署简单.管理起来也方便.但是随着集群规模的不断扩大,在整个集群的资源规划和稳定性上都遭受到了不同程度的挑战.业务数据不断增长和 ...

  5. 海量数据拉升背后的成本困扰:存算分离成美图降本增效新良方

    摘要:如何快速通过云化,实现资源利用率提升,降本增效,打破传统系统建设的数据孤岛,成为企业快速发展的关键所在. 随着5G和AIoT技术的发展,数据量指数级增长,新的数据业务层出不穷.作为数字化时代的先 ...

  6. 从 Hadoop 到云原生, 大数据平台如何做存算分离

    Hadoop 的诞生改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,受到广泛的应用,给整个行业带来了变革意义的改变:随着云计算时代的到来, 存算分离的架构受到青睐,企业开开始对 Hado ...

  7. 存算分离架构的高斯Redis,用强一致提供可靠保障

    摘要:其实开源Redis的弱一致性已经不满足很多应用场景的诉求.怎么,不信? 本文分享自华为云社区<华为云企业级Redis揭秘第15期:Redis为什么需要强一致?>,作者: GaussD ...

  8. 统一元数据,数据湖Catalog让大数据存算分离不再是问题

    本文分享自华为云社区<统一元数据,华为云MRS 数据湖Catalog重磅推出!>,原文作者:ryanlunar. 1 背景 随着5G.IoT等技术的发展,企业积累了越来越多的数据,需要激发 ...

  9. 突破开源Redis的内存限制,存算分离的GaussDB到底有多能“装”?

    摘要:GaussDB(for Redis)(下文简称高斯Redis)是华为云数据库团队自主研发的兼容Redis协议的云原生数据库,该数据库采用计算存储分离架构,突破开源Redis的内存限制,可轻松扩展 ...

最新文章

  1. 石川es6课程---13-16、generator-认识生成器函数
  2. 手把手教你pyqt中.qrc图片文件的编写和使用
  3. delphi ttabcontrol 顺序_健身指南健身训练,这样安排顺序更有效哦!
  4. 408考研数据结构复习-时间复杂度与空间复杂度-附统考真题
  5. 使用aggregate在MongoDB中查找重复的数据记录
  6. java的oauth2.0_[转]Java的oauth2.0 服务端与客户端的实现
  7. sql语句在navicat中可以查询到所有数据但是在idea程序中不行_数据迁移测试实施方案...
  8. linux 系统终端字体改变,linux系统终端修改字体的方法
  9. php libiconv close_PHP 5.3.10 编译安装时出现 undefined reference to `libiconv' 错误的解决方法...
  10. 感知层在物联网中的重要性
  11. 即不充值影视Vip,也不去电影院,为何Python爬虫师是这种人?
  12. Textpattern Solutions: PHP-Based Content Management Made Easy
  13. 华为手机Mate20pro打开AP LOG依然无法连接Locat解决办法
  14. 关于ubuntu系统的scp服务提示Permission denied
  15. Lumerical MODE solution FBG光栅透射谱的仿真,官网fbg.lms例子的详解
  16. openlayers在线地图:高德地图、天地图、谷歌、geoq(智图)
  17. IDEA-集成VisualVM插件,启动Java VisualVM
  18. SSM框架搭建详细解析
  19. 大数据分析与实践 数据预处理-主成分分析
  20. 如何有效实现软件的需求管理 - 7

热门文章

  1. 笔记随笔1(webpack,vue-router,vuex)
  2. 基于React+Koa实现一个h5页面可视化编辑器-Dooring
  3. Git笔记(2) 入门认知
  4. multipartfile 获取音频时长_QQ音乐移动端加入倍速播放,蓄力长音频发展 | 产品观察...
  5. python怎么让画笔向下移动_Pandas 解决dataframe的一列进行向下顺移问题
  6. 手机距离传感器坏了有什么影响_适合手机兼职的工作有什么影响吗
  7. php mysql事务实例_PHP + MySQL事务示例
  8. CCActionEase想说爱你也不难(上)
  9. pycharm下打开、执行并调试scrapy爬虫程序
  10. ant design样式不生效官方解决方案