美文网首页
clickhouse vs kudu

clickhouse vs kudu

作者: JX907 | 来源:发表于2021-01-27 16:42 被阅读0次

一、项目背景
清洗的结果中有两张比较大的表:
1)ip域名关系首次发现统计表,日增约0.5亿;
2)ip域名关系历史变化轨迹统计表,日增约1.4亿;

前端查询方式包括以下两种方式:
1)查询某个ip的信息,例如:select * from xxx where ip='xxxx'
2)查询某个域名的信息,例如: select * from xxx where dn = 'xxx'

二、clickhouse
优势:
1)数据压缩率高、写入性能高;
2)主键最左侧列出现在查询条件中时查询耗时在1秒内。(实测数据44亿,公司wiki其他项目组测试数据在百亿级别)

存在问题:
1)只有主键中的第二列出现在查询条件中时,查询速度很差,实测数据量在十亿级别时耗时在几十秒甚至查不出。
官网中也提到过该问题,见下图:

1.png

(来源:https://blog.csdn.net/bluetjs/article/details/80322497)

2)不能保证数据全局唯一,clickhouse的主键并不能约束数据唯一性,即使使用ReplacedMergeTree,也只能保证分区内数据唯一。

3)跳数索引作用不大,实测过set、ngrambf_v1、tokenbf_v1。(后两者均为布隆过滤器)

三、impala+kudu
由于clickhouse存在类似主键“最左原则”问题,导致无法同时满足dns反查的应用场景,变通的解决方案是同时存储两份数据,一份使用ip作为主键,另一份使用域名作为主键,前端不同查询场景分别转换为对这两份数据的查询,但这种解决方案存在数据不一致的隐患,一旦出现两份数据不一致时对数据的比对、修复等都是件麻烦的事情,此外还增加了数据同步任务维护的负担。
思考是否存在一种存储方式能够同时满足两个主键的索引(或分区)。
kudu可以支持同时按hash和范围分区,例如:
PARTITION BY HASH (id) PARTITIONS 4,
RANGE (sku)
(
PARTITION VALUES < ‘g’,
PARTITION ‘g’ <= VALUES < ‘o’,
PARTITION ‘o’ <= VALUES < ‘u’,
PARTITION ‘u’ <= VALUES
)
这样在原理上是能够支持分别按单列作为查询条件的应用场景。

四、clickhouse与kudu对比

clickhouse impala+kudu
服务器情况 单机128G 24核 4台 128G 24核

2.png

集群支持情况 支持,但对zk的依赖过重 支持,不依赖zk,内部使用raft算法;可在CDH中管理impala和kudu
数据一致性支持情况 不能保证数据一致性,即使使用ReplacedMergeTree,也只能保证分区内数据唯一 支持upsert操作,能够保证唯一性
占用磁盘空间 44亿69g 31亿163G
写入速度 10万/s 23万/s
查询速度 10亿数据量时:只有主键中最左侧列作为查询条件时耗时在1秒内;当主键中最左侧列不在查询条件中时耗时在几十秒 29亿时分别将ip和域名作为条件查询耗时均在1秒内;63亿时ip作为条件(range分区)时,耗时大部分在1~2秒,部分查询时间在几十秒(原因待查)域名作为条(hash分区),耗时基本在1秒内
并发 不支持大并发查询 不支持大并发查询

kudu查询性能记录
1、集群描述
3个master 3个tabletserver
128G内存(设置kudu和impala可用内存上限均为80G) 24核

2、不同条件下的查询时间记录

数量 dn作为条件查询 ip作为条件
29亿 select * from kd.t_ip_dn_first_test2 where dn= 'lovelit.org' limit 10; 0.24 0.13 0.13 select * from kd.t_ip_dn_first_test2 where ip_num='1806320426' limit 10; 0.85 0.84 0.73
63亿 select * from kd.t_ip_dn_first_test2 where dn= 'lovelit.org' 1.99 0.12 0.12 select * from kd.t_ip_dn_first_test2 where ip_num='1806320426'; 1.28 1.33 1.30
110亿 select * from kd.t_ip_dn_first_test2 where dn= 'lovelit.org' 2.21 0.11 0.13 select * from kd.t_ip_dn_first_test2 where ip_num='1806320426'; 111.12 4.78 2.59

3、数据量为28亿时的查询记录
总数:

3.png

将dn作为条件查询:

4.png 5.png

将ip作为条件查询:

6.png

4、数据量为63亿时的查询记录
总数:

7.png

将dn作为条件查询:

8.png

将ip作为条件查询:

9.png

在某些时候查询速度一般(第一次查询慢,再次查会快),

10.png

5、数据量为110亿时的查询记录
总数:


11.png

将dn作为条件查询:

12.png

将ip作为条件查询:

13.png

附录: 一些其他对比

clickhouse kudu
并发qps 100qps/s 100w/s
join支持 join写法比较特殊;最新版已支持类似SQL的join,但性能不好;无论是Left Join 、Right Join还是Inner Join永远都是拿着右表中的每一条记录到左表中查找该记录是否存在,所以右表必须是小表 与impala或sparksql集成后支持标准sql
小批量写入对性能影响 尽量做1000条以上批量的写入,避免逐行insert或小批量的insert,update,delete操作,因为ClickHouse底层会不断的做异步的数据合并,会影响查询性能,这个在做实时数据写入的时候要尽量避开 无影响
cpu Clickhouse快是因为采用了并行处理机制,即使一个查询,也会用服务器一半的CPU去执行,所以ClickHouse不能支持高并发的使用场景,默认单查询使用CPU核数为服务器核数的一半,安装时会自动识别服务器核数,可以通过配置文件修改该参数
查询性能 count: 千万级别,500毫秒,1亿 800毫秒 2亿 900毫秒 3亿 1.1秒 group: 百万级别 200毫米,千万 1秒,1亿 10秒,2亿 20秒,3亿 30秒join:千万-10万 600 毫秒, 千万 -百万:10秒,千万-千万 150秒
使用场景 不适合分析场景,聚合排序 既有随机(hbase擅长)又有批量扫描(hdfs顺序读写)
优点 1、高效使用cpu2、顺序IO,因此对磁盘没有要求3、索引不使用B树,不受最左原则限制,只要字段在索引中就可以4、写入速度非常快,50-200M/s,对于大量的数据更新非常适用。 1、可以解决流式计算结果的更新;2、
缺点 1、不支持事务2、不支持高并发,官方建议100qps/s3、耗cpu 1、只有主键可以设置range分区,且只能有一个主键;2、pyspark连接kudu时不支持调用kudu本地库,scala spark支持,支持kudu的各种语法(哪些语法?)3、shell不能查询到表的schema,可通过impala和spark的dataframe获取4、时间格式是utc格式的,差8个小时
总结 可作为dws宽表层使用,减少join查询 tserver不要超过100台,单个tserver支持100个tablet,单个tablet支持10G数据,单表最多使用100个tablet;因此:1、不适用pb级数据;2、每台tserver支持1T数据3、单表最大1T数据

相关文章

  • clickhouse vs kudu

    一、项目背景清洗的结果中有两张比较大的表:1)ip域名关系首次发现统计表,日增约0.5亿;2)ip域名关系历史变化...

  • Druid vs Kudu

    Kudu's storage format enables single row updates, whereas...

  • ClickHouse IN vs GLOBAL IN

    (1)join/inrequestor server在接收到请求以后会将请求发送到remote server上,在...

  • Clickhouse VS Doris

    一、存储引挚 Clickhouse Mergetree存储用于大数据场景,log存储引挚用于100万及以下场景,后...

  • Doris vs ClickHouse vs GreenPlum

    Doris构建数据仓库: ClickHouse和DorisDB的对比: 标准SQL语言支持 ClickHous...

  • Apache Kudu 简介

    Apache Kudu 简介 目录 Apache Kudu 简介... 1 Apache Kudu是为Hadoop...

  • Kudu 1.7.0安装

    kudu master: edphost2~4kudu-tserver: edphost2~6 1. kudu安装...

  • Introducing Apache Kudu

    Introducing Apache Kudu Kudu is a columnar storage manage...

  • Kudu:Apache Kudu 简介和架构

    摘要:Kudu,Hdfs,Hbase Kudu简介 Kudu是由Cloudera开源的存储引擎,可以同时提供低延迟...

  • python连接kudu环境配置.md

    只能在Linux环境下安装 查看kudu和cdh版本 find / -name 'kudu*' 离线下载kudu-...

网友评论

      本文标题:clickhouse vs kudu

      本文链接:https://www.haomeiwen.com/subject/xaeazktx.html