首先说一下Hbase与Kudu,可以说是Kudu师承Hbase,架构是类似的master-slave结构。Hbase的物理模型是master和regionserver,regionserver存储的是region,region里边很有很多store,一个store对应一个列簇,一个store中有一个memstore和多个storefile,store的底层是hfile,hfile是hadoop的二进制文件,其中HFile和HLog是Hbase两大文件存储格式,HFile用于存储数据,HLog保证可以写入到HFile中;
Kudu的物理模型是master和tserver,其中table根据hash和range分区,分为多个tablet存储到tserver中,tablet分为leader和follower,leader负责写请求,follower负责读请求,总结来说,一个ts可以服务多个tablet,一个tablet可以被多个ts服务(基于tablet的分区,最低为2个分区)
而Clickhouse的特点在于它号称最快的查询性能,虽然也能存储数据,但并不是他的强项,而且Clickhouse还不能update/delete数据。
最后从下面几个维度来对比一下Hbase、Kudu和Clickhouse。
| Hbase | Kudu | Clickhouse | |
|---|---|---|---|
| 数据存储 | Zookeeper保存元数据,数据写入HDFS(非结构化数据) | master保存元数据,数据及副本存储在tserver(强类型数据) | Zookeeper保存元数据,数据存储在本地,且会压缩 |
| 查询 | 查询比较麻烦,Phoenix集成之后比较好点 | 查询比较麻烦,集成Impala之后表现优秀 | 高效的查询能力 |
| 数据读写 | 支持随机读写,删除。更新操作是插入一条新timestamp的数据 | 支持读写,删除,更新 | 支持读写,但不能删除和更新 |
| 维护 | 需要同时维护HDFS、Zookeeper和Hbase(甚至于Phoenix) | CDH版本维护简单,Apache版需要单独维护,额外还有Impala | 额外维护Zookeeper |
所以Hbase更适合非结构化的数据存储;在既要求随机读写又要求实时更新的场景;Kudu+Impala可以很好的胜任,当然再结合CDH就更好了,瓶颈并不在Kudu,而在Impala的Apache部署,特别麻烦。详见 Apache集群安装Impala;如果只要求静态数据的极速查询能力,Clickhouse则更好。
