Hbase、Kudu和ClickHouse横向对比
好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.
目录
1 前言
2 安装部署方式对比
3 组成架构对比
4 基本操作对比
4.1 数据读写操作
4.2 数据查询操作
5 HBASE在滴滴出行的应用场景和最佳实践
5.1 订单事件
5.2 司机乘客轨迹
5.3 ETA
5.4 监控工具DCM
5.5 小结
6 网易考拉基于KUDU构建实时流量数仓实践
6.1 实时流/业务数据写入
6.2 写入性能测试
6.3 小结
7 携程CLICKHOUSE日志分析实践
7.1 消费数据到CLICKHOUSE
7.2 数据展示
7.3 查询优化
7.4 CLICKHOUSE基本运维
7.5 小结
8 总结
1 前言
Hadoop生态圈的技术繁多。HDFS一直用来保存底层数据,地位牢固。Hbase作为一款Nosql也是Hadoop生态圈的核心组件,它海量的存储能力,优秀的随机读写能力,能够处理一些HDFS不足的地方。
Clickhouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。能够使用SQL查询实时生成分析数据报告。它同样拥有优秀的数据存储能力。
Apache Kudu是Cloudera Manager公司16年发布的新型分布式存储系统,结合CDH和Impala使用可以同时解决随机读写和sql化数据分析的问题。分别弥补HDFS静态存储和Hbase Nosql的不足。
既然可选的技术路线有这么多,本文将从安装部署、架构组成、基本操作等方面横向对比一下Hbase、Kudu和Clickhouse。
另外这里还引入了几个大厂的实践作为例子予以参考。
2 安装部署方式对比
具体的安装步骤不过多赘述,这里只简要比较安装过程中需要依赖的外部组件。
- Habse安装
依赖HDFS作为底层存储插件
依赖Zookeeper作为元数据存储插件 - Kudu安装
依赖Impala作为辅助分析插件
依赖CDH集群作为管理插件,但是不是必选的,也可以单独安装 - Clickhouse安装
依赖Zookeeper作为元数据存储插件和Log Service以及表的 catalog service
3 组成架构对比
Hbase架构
Kudu架构
Clickhouse架构
网上只找到一个字节bytedance关于Clickhouse中zk的架构图,如下所示:
综上所示,Hbase和Kudu都是类似于Master-slave的架构而Clickhouse不存在Master结构,Clickhouse的每台Server的地位都是等价的,是multi-master模式。不过Hbase和Clickhouse额外增加了一个Zookeeper作为辅助的元数据存储或者是log server等,而Kudu的元数据是Master管理的,为了避免server频繁从Master读取元数据,server会从Master获取一份元数据到本地,但是会有元数据丢失的风险。
4 基本操作对比
4.1 数据读写操作
- Hbase
读流程
写流程
- Kudu
- Clickhouse
Clickhouse是个分析型数据库。这种场景下,数据一般是不变的,因此Clickhouse对update、delete的支持是比较弱的,实际上并不支持标准的update、delete操作。
Clickhouse通过alter方式实现更新、删除,它把update、delete操作叫做mutation(突变)。
标准SQL的更新、删除操作是同步的,即客户端要等服务端反回执行结果(通常是int值);而Clickhouse的update、delete是通过异步方式实现的,当执行update语句时,服务端立即反回,但是实际上此时数据还没变,而是排队等着
4.2 数据查询操作
- Hbase
不支持标准sql,需要集成Phoenix插件。Hbase自身有Scan操作,但是不建议执行,一般会全量扫描导致集群崩溃 - Kudu
与Impala集成实现查询 - Clickhouse
自身有优良的查询性能
5 HBASE在滴滴出行的应用场景和最佳实践
参考链接:https://mp.weixin.qq.com/s/x7KwIW7YMiI1SJJbAt14lg
HBase在滴滴主要存放了以下四种数据类型:
- 统计结果、报表类数据:主要是运营、运力情况、收入等结果,通常需要配合Phoenix进行SQL查询。数据量较小,对查询的灵活性要求高,延迟要求一般。
- 原始事实类数据:如订单、司机乘客的GPS轨迹、日志等,主要用作在线和离线的数据供给。数据量大,对一致性和可用性要求高,延迟敏感,实时写入,单点或批量查询。
- 中间结果数据:指模型训练所需要的数据等。数据量大,可用性和一致性要求一般,对批量查询时的吞吐量要求高。
- 线上系统的备份数据:用户把原始数据存在了其他关系数据库或文件服务,把HBase作为一个异地容灾的方案。
5.1 订单事件
近期订单的查询会落在Redis,超过一定时间范围,或者当Redis不可用时,查询会落在HBase上。业务方的需求如下:
- 在线查询订单生命周期的各个状态,包括status、event_type、order_detail等信息。主要的查询来自于客服系统。
- 在线历史订单详情查询。上层会有Redis来存储近期的订单,当Redis不可用或者查询范围超出Redis,查询会直接落到HBase。
- 离线对订单的状态进行分析。
- 写入满足每秒10K的事件,读取满足每秒1K的事件,数据要求在5s内可用。
5.2 司机乘客轨迹
举几个使用场景上的例子:用户查看历史订单时,地图上显示所经过的路线;发生司乘纠纷,客服调用订单轨迹复现场景;地图部门用户分析道路拥堵情况。
- 满足App用户或者后端分析人员的实时或准实时轨迹坐标查询;
- 满足离线大规模的轨迹分析;
- 满足给出一个指定的地理范围,取出范围内所有用户的轨迹或范围内出现过的用户。
其中,关于第三个需求,地理位置查询,我们知道MongoDB对于这种地理索引有源生的支持,但是在滴滴这种量级的情况下可能会发生存储瓶颈,HBase存储和扩展性上没有压力但是没有内置类似MongoDB地理位置索引的功能,没有就需要我们自己实现。通过调研,了解到关于地理索引有一套比较通用的GeohHash算法 。
把GeoHash和其他一些需要被索引的维度拼装成Rowkey,真实的GPS点为Value,在这个基础上封装成客户端,并且在客户端内部对查询逻辑和查询策略做出速度上的大幅优化,这样就把HBase变成了一个MongoDB一样支持地理位置索引的数据库。如果查询范围非常大(比如进行省级别的分析),还额外提供了MR的获取数据的入口。
两种查询场景的Rowkey设计如下: - 单个用户按订单或时间段查询: reverse(user_id) + (Integer.MAX_LONG-TS/1000)
- 给定范围内的轨迹查询:reverse(geohash) + ts/1000 + user_id
5.3 ETA
- 模型训练通过Spark Job,每30分钟对各个城市训练一次;
- 模型训练第一阶段,在5分钟内,按照设定条件从HBase读取所有城市数据;
- 模型训练第二阶段在25分钟内完成ETA的计算;
- HBase中的数据每隔一段时间会持久化至HDFS中,供新模型测试和新的特征提取。
Rowkey:salting+cited+type0+type1+type2+TS
Column:order, feature
5.4 监控工具DCM
5.5 小结
6 网易考拉基于KUDU构建实时流量数仓实践
6.1 实时流/业务数据写入
private val stream = KafkaUtils.createDirectStream[String, String](ssc,PreferConsistent,Subscribe[String, String](topics, kafkaParams))
val offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRangesval spark = SparkSession.builder.config(rdd.sparkContext.getConf).getOrCreate()
val kuduContext = new KuduContext(kuduMaster, spark.sparkContext)val flowDf = spark.createDataFrame(rdd.map(r => {processFlowLine(r.value)}).filter(row => if (row.get(0) == null) false else true), schema)
kuduContext.upsertRows(flowDf, "impala::kaola_kudu_internal.dwd_kl_flw_app_rt")stream.asInstanceOf[CanCommitOffsets].commitAsync(offsetRanges)
6.2 写入性能测试
spark.streaming.concurrentJobs = N
6.3 小结
目前实时写入Kudu的流量日志在每日数十亿条,写入量在TB级,而且已有实时流量拆解等业务依赖Kudu的底层流量数据,接下来将会有更多的业务线迁移至Kudu以满足不同维度下的分析需求
7 携程CLICKHOUSE日志分析实践
7.1 消费数据到CLICKHOUSE
7.2 数据展示
7.3 查询优化
7.4 CLICKHOUSE基本运维
7.5 小结
8 总结
最后从下面几个维度来对比一下Hbase、Kudu和Clickhouse。
Hbase | Kudu | Clickhouse | |
---|---|---|---|
数据存储 | Zookeeper保存元数据,数据写入HDFS(非结构化数据) | master保存元数据,数据及副本存储在tserver(强类型数据) | Zookeeper保存元数据,数据存储在本地,且会压缩 |
查询 | 查询比较麻烦,Phoenix集成之后比较好点 | 查询比较麻烦,集成Impala之后表现优秀 | 高效的查询能力 |
数据读写 | 支持随机读写,删除。更新操作是插入一条新timestamp的数据 | 支持读写,删除,更新 | 支持读写,但不能删除和更新 |
维护 | 需要同时维护HDFS、Zookeeper和Hbase(甚至于Phoenix) | CDH版本维护简单,Apache版需要单独维护,额外还有Impala | 额外维护Zookeeper |
Hbase、Kudu和ClickHouse横向对比相关推荐
- HBase、Kudu 和 ClickHouse 全视角对比
前言 Hadoop生态圈的技术繁多.HDFS一直用来保存底层数据,地位牢固.Hbase作为一款Nosql也是Hadoop生态圈的核心组件,它海量的存储能力,优秀的随机读写能力,能够处理一些HDFS不足 ...
- 转:【AI每日播报】从TensorFlow到Theano:横向对比七大深度学习框架
http://geek.csdn.net/news/detail/139235 说到近期的深度学习框架,TensorFlow火的不得了,虽说有专家在朋友圈大声呼吁,不能让TensorFlow形成垄断地 ...
- Linux_linux常用工具---闲杂篇(除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点.)
vim自行查找资料, 自行配置插件. 借鉴别人的 " 显示相关 """"""""""&qu ...
- 冷藏温度范围_机械式、干冰式、冷板式、液氮式等冷藏车制冷方式横向对比
小编之前已经单独将机械式.干冰式.冷板式.液氮式等冷藏车的工作原理和优缺点都跟大家介绍过了,那么今天将几个车型做一个横向对比,并在文末放上对比结果,供大家作一个购车参考. 水冰及盐冰制冷 在大气压力下 ...
- 横向对比5大开源语音识别工具包,CMU Sphinx最佳
目前开源世界里存在多种不同的语音识别工具包,它们为开发者构建应用提供了很大帮助.这些工具各有哪些优劣?数据科学公司 Silicon Valley Data Science 为我们带来了 5 种流行工具 ...
- 资源 | 横向对比5大开源语音识别工具包,CMU Sphinx最佳
选自svds 作者:Cindi Thompson 机器之心编译 参与:李泽南.Smith目前开源世界里存在多种不同的语音识别工具包,它们为开发者构建应用提供了很大帮助.这些工具各有哪些优劣?数据科学公 ...
- 数据库学习之多种数据库横向对比
数据库学习之多种数据库横向对比 前言 横向对比 区别分析 MySQL PostgreSQL Oracle SqlServer 其他 技术分析 获取数据库(database) 获取约束(schema) ...
- 2020年国内 IoT物联网平台横向对比报告
金秋十月,丹桂飘香,中秋巧遇国庆! 值此佳节,我们为 IoT 物联网领域的广大开发者们带来了<2020年国内 IoT物联网云平台横向对比报告>. 此<报告>与Gartner和I ...
- 举个栗子!Tableau 技巧(152):横向对比堆叠柱形图的各部分占比
柱形图因其一目了然的特点,成为最常用的分析图表之一.而堆叠柱形图则可以更清晰地比较某一个维度中不同类型数据之间的差异,也深受分析用户推崇. 很多 Tableau 用户在使用堆叠柱形图时,会遇到这样的问 ...
最新文章
- python 导入包的路径_关于Python包导入的知识点你知道吗?
- vs编译慢原因和解决方法
- 验证输入的是否数字的几种方法
- step3 . day3 数据结构之线性表 单项循环链表和双向循环链表
- 10 分钟入门 Less 和 Sass
- Yii防注入攻击笔记
- 【clickhouse】clickhouse表引擎之 kafka 表引擎 卡死
- (并查集)~APTX4869(fzu 2233)
- 孙忠的面向对象第二次作业
- SpringMVC中实现文件上传
- data could not be sent to remote host
- 用photoshop做电影胶片效果
- 第13章WEB13-JSP模式JDBC高级篇
- 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t
- 欧姆龙PLC以太网与西门子WINCC通讯
- Mac删除多余的输入输出设备,删除EasyConnectAudio
- 推荐使用什么样的平台表单制作工具好?
- opensuse安装face_recognition全记录
- 诺丁汉大学的计算机工程专业咋样,诺丁汉大学电子计算机工程本科专业.pdf
- Java程序性能优化——设计优化