2. Clickhouse玩转每天千亿数据-趣头条
• 业务背景 • 集群现状 • 我们遇到的问题 业务背景 基于storm的实时指标的计算存在的问题 1:指标口径(SQL) -> 实时任务 2:数据的回溯 3:稳定性 业务背景 什么是我们需要的? 1:实时指标SQL化 2:数据方便回溯,数据有问题,方便恢复 3:运维需要简单 4:计算要快,在一个周期内,要完成所有的指标的计算 集群现状 100+台32核128G 部分复杂累时查询30S内完成 问题: 1:内存限制,对于一些大的查询会出现内存不够问题 2:存储限制,随着表越来多,磁盘报警不断 3:cpu限制 64G对于一些大表(每天600亿+)的处理,很容易报错,虽然有基于磁盘解决方案,但是会影响速度 clickhouse的数据目录还不支持多个数据盘,单块盘的大小限制太大 cpu需要根据实际情况而定 解决: 1:机器的内存推荐128G+ 2:采用软连接的方式,把不同的表分布到不同的盘上面,这样一台机器可以挂载更多的盘 (timestamp, eventType) or order by (eventType, timestamp) 业务场景 1:趣头条和米读的上报数据是按照”事件类型”(eventType)进行区分 2:指标系统分”分时”和”累时”指标 3:指标的一般都是会按照eventType进行区分 select count(1) from table where dt='' and timestamp>=''0 码力 | 14 页 | 1.10 MB | 1 年前32. ClickHouse MergeTree原理解析-朱凯
TABLE [IF NOT EXISTS] [db_name.]table_name ( name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr], name2 [type] [DEFAULT|MATERIALIZED|ALIAS expr], 省略... ) ENGINE = MergeTree() [PARTITION BY expr] [ORDER > 'A000' ('A000', +inf) WHERE ID < 'A188' (-inf, 'A188') WHERE ID LIKE 'A006%' ['A006', 'A007') 2. 递归交集判断 3. 合并MarkRange区间 索引的查询过程 二级索引 跳数索引 目前,MergeTree共支持4种跳数索引,分别是minmax、set和ngrambf_v1和tokenbf_v1。 v1。 数据存储 按列存储,精心编排,错落有致 压缩数据块,就好比是一本书的文字段落,是组织文字的基本单元。 压缩数据块 头信息固定使用9位字节表示,具体 由1个UInt8(1字节)整型和2个 UInt32(4字节)整型组成 。 压缩数据块大小 l 单个批次数据 size < 64K 如果单个批次数据小于64K,则继续获取下一批 数据,直至累积到size >= 64K时,生成下一个压缩0 码力 | 35 页 | 13.25 MB | 1 年前32. 腾讯 clickhouse实践 _2019丁晓坤&熊峰
ClickHouse 应用实践 丁晓坤 & 熊峰 一切以用户价值为依归 2 • Clickhouse 的部署与监控管理 • Clickhouse 的应用实践 iData 目录 部署与监控管理 一切以用户价值为依归 3 1 4 部署与监控管理 1 高内存,廉价存储: 单机配置: Memory128G CPU核数24 SATA20T,RAID5 万兆网卡 一切以用户价值为依归 Shard01 Shard02 Shard03 Load Balancing 一切以用户价值为依归 6 部署与监控管理 1 线性平滑扩容: 扩容: 1.安装新部署新的shard分片机器 2.新shard上创建表结构 3.批量修改当前集群的配置文件增加新的分片 4.名字服务添加节点 一切以用户价值为依归 7 部署与监控管理 1 大批量,少批次 WriteModel BatchSize 一切以用户价值为依归 业务应用实践 iData 14 2 一切以用户价值为依归 15 业务应用实践 iData 2 一切以用户价值为依归 l 游戏数据分析的业务背景 l iData 数据分析引擎TGMars l 为什么选用ClickHouse l 平台在ClickHouse上的使用 16 业务应用实践 iData 2 腾讯游戏 数据化驱动服务 场景视图: TGlog 服务端采集0 码力 | 26 页 | 3.58 MB | 1 年前33. Sync Clickhouse with MySQL_MongoDB
binlog/oplog CRUD directly Can’t update/delete table frequently in Clickhouse Possible Solutions 2. MySQL Engine Not suitable for big tables Not suitable for MongoDB Possible Solutions 3. Reinit name flag 2 Bob1 0 id name flag 2 Bob1 1 PTS Magical Flag Read PTS Magical Flag Update PTS Magical Flag Update id name flag 2 Bob1 1 2 Bob2 0 id name flag 2 Bob1 2 2 Bob2 1 PTS Magical Magical Flag Delete PTS Magical Flag Delete id name flag 2 Bob1 2 2 Bob2 1 2 Bob2 3 id name flag 2 Bob1 2 2 Bob2 2 2 Bob2 3 PTS Magical Flag Add new column PTS Magical Flag Why fast? Clickhouse0 码力 | 38 页 | 7.13 MB | 1 年前3Тестирование ClickHouse которого мы заслуживаем
петабайты данных › Поддерживает гибкий SQL с расширениями › Отказоустойчив при работе в разных ДЦ 2 / 77 Тестирование ClickHouse, которого мы заслуживаем ClickHouse: как проект › Открытый исходный код SELECT metroHash64(uniqUpTo('\0', '2[Vu'), 'Y&d'); SELECT joinGet(toDateTimeOrNull((CAST(([885455.14523]) AS String)))); SELECT (SELECT 1) FROM remote('127.0.0.{1,2}', system.one); 21 / 77 Тестирование Consistent › Highly Available: - Переживает разрывы между узлами - Потерю соединения с ZK node 1 node 2 23 / 77 Тестирование ClickHouse, которого мы заслуживаем Интеграционные тесты: что хотим › Моделировать0 码力 | 84 页 | 9.60 MB | 1 年前3ClickHouse in Production
updates › Key-value access with high request rate › Over-normalized data › Blob or document storage 2 / 97 Highload Architecture https://github.com/donnemartin/system-design-primer 3 / 97 Highload Architecture Enum('Hit'=0, 'Show'=1, 'Click'=2) ) 49 / 97 In ClickHouse: DDL CREATE TABLE EventLogHDFS ( EventTime DateTime, BannerID UInt64, Cost UInt64, CounterType Enum('Hit'=0, 'Show'=1, 'Click'=2) ) ENGINE = HDFS(' EventLogHDFS ( EventTime DateTime, BannerID UInt64, Cost UInt64, CounterType Enum('Hit'=0, 'Show'=1, 'Click'=2) ) ENGINE = HDFS('hdfs://hdfs1:9000/event_log.parq', 'Parquet') Ok. 0 rows in set. Elapsed: 0.0040 码力 | 100 页 | 6.86 MB | 1 年前34. ClickHouse在苏宁用户画像场景的实践
https://github.com/andyyzh Contents 苏宁如何使用ClickHouse ClickHouse集成Bitmap 用户画像场景实践 2 选择ClickHouse的原因 1. 速度快 2. 特性发布快 3. 软件质量高 4. 物化视图 5. 高基数查询 6. 精确去重计数(count distinct) 3 50.437 7.038 0 10 20 30 40 50 60 时长 结论: • 整形值精确去重场景,groupBitmap 比 uniqExact至少快 2x+ • groupBitmap仅支持整形值去重, uniqExact支持任意类型去重。 • 非精确去重场景,uniq在精准度上有优势。 5 0.25 0.46 0.29 0 操作完成留存分析、漏斗分析、用户画像分析等场景的计算。 00101110 00100001 00100000 …… Byte[0] Byte[1] Byte[2] Byte[n] 9 Index = 8 集合:[1, 2, 3, 5, 8, 13, 21] RoaringBitmap原理介绍 主要原理:将32bit的Integer划分为高16位和低16位(两个short int),两者之间是Key-Value的0 码力 | 32 页 | 1.47 MB | 1 年前3ClickHouse on Kubernetes
ClickHouse on Kubernetes? NOT REALLY Challenges running ClickHouse on Kubernetes? 1. Provisioning 2. Persistence 3. Networking 4. Transparency The ClickHouse operator turns complex data warehouse Zookeeper Services Zookeeper-0 Zookeeper-2 Zookeeper-1 Replica Service Load Balancer Service Shard 1 Replica 2 Shard 2 Replica 1 Shard 2 Replica 2 Replica Service Replica Service spec: configuration: clusters: - name: "demo" layout: shardsCount: 2 replicasCount: 1 Next let’s add a shard $ kubectl apply -f docs/examples/demo-01.yaml0 码力 | 34 页 | 5.06 MB | 1 年前37. UDF in ClickHouse
UDF in ClickHouse Concept, Develpoment, and Application in ML Systems Begin Content Area = 16,30 2 About CraiditX CraiditX 氪信, a finance AI startup since 2015 The Main Business • AI-based risk control pow(stddevPop(x), 3) FROM data SELECT (sum(pow(x, 3)) / count() - 3 * sum(pow(x, 2)) * sum(x) / pow(count(), 2) + 2 * pow(sum(x), 3) / pow(count(), 3)) / pow(stddevPop(x), 3) FROM data Begin Content rule(r2, r1)(require(get(1) = ''product_info.html''), product_id(get(2)), return(''viewed'')), rule(r3, r2)(require(get(1) = ''product_buy.html''), verify(product_id = get(2)), r0 码力 | 29 页 | 1.54 MB | 1 年前3C++ zero-cost abstractions на примере хеш-таблиц в ClickHouse
хеш-таблицы 01 Хеш-таблицы в ClickHouse 1. GROUP BY 2. JOIN 3. SELECT DISTINCT 44 Хеш-таблица 55 Основные методы 1. lookup O(1) average 2. insert O(1) average 3. erase O(1) average (Не очень важен 88 1. Хеш-функция 2. Способ разрешения коллизий 3. Ресайз 4. Способ размещения ячеек в памяти Выбор хеш-функции 99 1. Не использовать identity-функцию для целочисленных типов 2. Не использовать хэш-функции latency 3 такта 2. Специальная хэш-функция для строк. Стандартно можно использовать CityHash, xxHash, wyhash Разрешения коллизий 11 11 Разрешения коллизий 12 12 1. Метод цепочек (Chaining) 2. Открытая0 码力 | 49 页 | 2.73 MB | 1 年前3
共 21 条
- 1
- 2
- 3