SlideShare a Scribd company logo
数据分析领域的⿊黑⻢马
--ClickHouse
Power Your Data
新浪-⾼高鹏-2018年年1⽉月


For ClickHouse Beijing Meetup
“⼯工具选的好,下班回家早”
⽬目录
• 数据分析⼯工具的选择

• ClickHouse原理理、架构

• ClickHouse在新浪的实践与经验

• ClickHouse案例例、⽣生态
我是谁?
我是⼲干啥的?
关于我
DBA
关于我
DA
DBA
关于我
Data Analyst
Data Translator
致⼒力力于运维⼤大数据
挖掘与分析
可视化、报警、数据分析
AI OPS
关于我们
“表哥” “表姐”们
我们需要什什么样的⼯工具?
Excel?
也⽤用
Hadoop Spark Hive

?
典型架构
DATA
But,

Hadoop这玩意,

不不是⼀一天就

能玩得转的啊~~
Google眼中的
Hadoop
多数⼈人眼中的
Hadoop
太重了了~
⼀一切以需求作为第⼀一位~
⼀一切以需求作为第⼀一位~
快速~ 好⽤用~ 体量量够⽤用~
⼀一切以需求作为第⼀一位~
快速~ 好⽤用~ 体量量够⽤用~
好维护!!
对结构化的数据
快速给出聚合/过滤结果
We Need
SQL
Fast SQL
Fast Complex
SQL
没有什么数据统计是一个SQL解决不了的。
如果有,那就2个
俄罗斯搜索巨头Yandex开源

列列式存储

集群

超⾼高性能
压缩
驱动丰富
SQL
线性扩展

PB级别
OLAP
统计函数
updated in real time
跨数据中⼼心
异步复制
最终⼀一致
不不⽀支持事务
不不⽀支持update/delete
然鹅,
查询‘巨’快
超⼤大容量量
But,
Let's Begin
部署:单机
1. 官⽅方提供Ubuntu包
2. 第三⽅方rpm包
2. Docker镜像
需要注意:
1. 修改⽹网络,默认监控IPv4/v6
2. ⾃自定义数据⽬目录,修改官⽅方启动脚本
3. Docker修改时区
部署
部署:单机
是不不是很SQL
部署:单机
蚝,
我们来压测⼀一下~
USA civil flights data
since 1987 till 2015
contains 166 millions rows
63 GB of uncompressed data
数据源
部署:单机
https://clickhouse.yandex/docs/en/getting_started/example_datasets/ontime.html
USA civil flights data
since 1987 till 2015
contains 166 millions rows
63 GB of uncompressed data
数据源
部署:单机
数据⼤大⼩小 173MB
⽂文件⾏行行数 436951
插⼊入耗时 4.731 Sec
平均速度 9.3 W/Sec
压缩率 5倍
https://clickhouse.yandex/docs/en/getting_started/example_datasets/ontime.html
部署:单机
并发5个进程 机器器负载
部署:单机
响应时间 峰值50W QPS
部署:单机
1. 查询总量量
2. 简单group by
查询类型
https://clickhouse.yandex/docs/en/getting_started/example_datasets/ontime.html
部署:单机
• 条件查询,聚合,排序
查询类型
https://clickhouse.yandex/docs/en/getting_started/example_datasets/ontime.html
部署:单机
• 复杂查询
查询类型
https://clickhouse.yandex/docs/en/getting_started/example_datasets/ontime.html
部署:单机
优点:
1. 部署简单
2. 全部CPU打满,查询效率极⾼高
问题:
1. 性能依赖单机(scale up路路线)
2. 存在单点故障⻛风险(宕机数据全丢)
1. 启动Server
2. use db, create table
3. 尽情select
4. 推荐引擎:MergeTree
使⽤用 总结
分区 主键 稀疏索引粒度
MergeTree
类似LSM Tree,但是没有内存表,不不记录log
直接落磁盘,按照主键排序,分块写⼊入
异步merge,与写不不冲突,最⼤大merge到⽉月纬度
不不⽀支持删除、修改
primary.idx+*.bin+*.mrk+checksums.txt+columns.txt
写
• 如何写的快?
• 是否可压缩?
• 主键查询:
eg: (x, y, z, date)
每8192⾏行行,抽取⼀一⾏行行数据
形成稀疏索引
最左原则?后⾯面讨论
读
• 如何快速查找?
• 数据量量⼤大,如何适应内存?
• ⾮非主键查询:
向量量化操作
性能奇⾼高
列列式存储+向量量化=超⾼高性能
MergeTree
存储结构
1. 并⾮非使⽤用BTree点对点查找,
稀疏索引,肯定存在⼤大量量⽆无⽤用数据过滤
2. 向量量化操作
数据加载到内存,
向量量化操作、过滤
数据在blcok的哪个位置
数据在哪个blcok
*.mrk
primary.index
查询条件
MergeTree
查询逻辑
重点在于定位block
MergeTree
索引分析
MergeTree
索引分析
MergeTree
索引分析
1. 如何定位Block
2. 向量量化过滤
MergeTree
索引建议
Query: where date=? and hour=? and xxx=?
Index A (date, hour, min, ts)
Index B (ts, min, hour, date)
A is Good.
1. 主键设计很关键,但是不不⽤用像MySQL那么操⼼心
2. 实际使⽤用,“差不不多就⾏行行了了”
3. 实际使⽤用,务必增加date=xxx字段,
通过分区过滤,即使⽤用了了很多⾮非主键,
实际查询效果对OLAP来说,完全可以接受
扩展性
可靠性
缺乏:
扩展性
可靠性
如何获得:
部署:‘分布式’
假的‘scale out’
借助于特殊引擎实现
借助配置⽂文件
概括
部署:‘分布式’
Distributed引擎:
1. 本身不不存储数据
2. 被写⼊入,做转发
3. 查询,作为中间件,
聚合后返回给⽤用户
集群名称 库 表 分布算法
分区 主键 颗粒度
apm_msg
apm_msg_all
部署:‘分布式’
分布式如何做到的
部署:‘分布式’
通过域名,写本地表
insert into apm_msg values()
总QPS=∑单机QPS
apm_msg
apm_msg_all
apm_msg
apm_msg_all
apm_msg
apm_msg_all
apm_msg
apm_msg_all
写
写操作
ClickHouse-xxxxxx.sina.com.cn
部署:‘分布式’
apm_msg
apm_msg_all
apm_msg
apm_msg_all
apm_msg
apm_msg_all
apm_msg
apm_msg_all
读操作
通过域名,读分布式表
select * from apm_msg_all
where xxx=yyy
原则:确保其他节点返回的数据,
⾃自⼰己还可以聚合,如top/
group by逻辑就不不同
读
ClickHouse-xxxxxx.sina.com.cn
部署:‘分布式’
apm_msg
apm_msg_all
apm_msg
apm_msg_all
apm_msg
apm_msg_all
apm_msg
apm_msg_all
读操作
收到请求的节点,
拿到所有节点数据
(各⾃自计算⼀一次)
本地汇总后
读
读取真实数据
ClickHouse-xxxxxx.sina.com.cn
部署:‘分布式’
apm_msg
apm_msg_all
apm_msg
apm_msg_all
apm_msg
apm_msg_all
apm_msg
apm_msg_all
读操作
返回给客户端
读取真实数据
读
聚合返回
ClickHouse-xxxxxx.sina.com.cn
部署:‘分布式’
通过全局配置⽂文件,达到集群相互知晓
各⾃自维护各⾃自的数据,让⽤用户⾃自⼰己写⼊入
⽔水平扩展性很好
查询/写⼊入能⼒力力随机器器数线性增加
cluster config updated on the fly
总结
部署:‘分布式’
1. 直接写分布式表,造成数据不不均匀
2. 域名映射的IP只有在初始解析
3. 新增节点,历史数据不不会搬迁,造成不不均衡
4. 过度的group by,导致⼤大量量数据交换
5. 数据分⽚片依赖单机稳定性,缺乏可靠性
6. 集群要么全⽤用,要么不不⽤用
问题
扩展性
可靠性
如何获得:
我们知道的复制:
ClickHouse的复制
ZK
apm_msg apm_msg apm_msg apm_msg
多源、多主、多向复制
数据‘互通有⽆无’
⾃自带检测机制
⾃自带同步机制(物理理复制)
依赖ZK
⾮非多数派写
部署:复制
ZK
apm_msg apm_msg apm_msg apm_msg
ReplicatedMergeTree('zk路路径', '副本名称', ⽇日期列列, (其他列列, ⽇日期列列), 索引粒度)
多源、多主、多向复制
数据‘互通有⽆无’
⾃自带检测机制
⾃自带同步机制(物理理复制)
依赖ZK
⾮非多数派写
部署:最佳架构
复制复制
复制复制
复制复制
A
B
C
A'A''
B'B''
C'C''
IDC1IDC2IDC3
3个IDC使⽤用复制机制做互备
每个IDC 3个节点,做分布式表,分担查询压⼒力力
如:
A/B/C 分别是数据的3个分⽚片,各⾃自承担1/3的数据
查询性能:A+B+C
部署:最佳架构
复制复制
复制复制
复制复制
A
B
C
A'A''
B'B''
C'C''
IDC1IDC2IDC3
1. 3个IDC,挂掉2个
不不影响读写
恢复只需重启实例例
ClickHouse⾃自动完成数据同步
2. 挂掉某个实例例,如A
切换读写到其他IDC,恢复实例例A即可
3. 挂掉多个实例例,A、B同时挂掉
处理理⽅方式同上
宕机分析
集群的ClickHouse有多快?
之前的架构
X 4
CPU E5-2620 @ 2.00GHz
开启超线程后24core
48G内存
3T*12 Raid5
请开始你的表演:
select count(*)
300亿
0.9秒
请开始你的表演:
select date, count(*) from xx
group by date
300亿group by⽇日期
9.8秒
请开始你的表演:
太复杂了了
请开始你的表演:
更更复杂了了
⽀支持Join
请开始你的表演:
官⽅方demo
请开始你的表演:
官⽅方压测PK
快
快
快
为啥这么快?
1. 优秀的代码编写,强⼤大的底层优化,严格的单元测试
2. A vector engine (多)& Code generation(少)
3. CPU底层指令集(SIMD)的使⽤用
4. 列列式存储、牺牲事务、MPP架构
为啥这么快?
PgSQL · 引擎介绍 · 向量量化执⾏行行引擎简介
向量量化与 计算
参照阅读
ClickHouse函数:
300+
ClickHouse⾼高级函数:
quantile(0.99)(X)

quantiles(0.9, 0.99, 0.999)(X)

median(X)

varSamp(X)

stddevSamp(X)
统计类 URL截取 其他
cutQueryString(X)

domain(X)
today()-1

yesterday()

substring(s, offset, length)

IPv4NumToStringClassC

extract(haystack, pattern)
⾼高级函数举例例:
域名类
⾼高级函数举例例:
IP归类
⾼高级函数举例例:
百分⽐比响应时间
ClickHouse的问题:
1. insert into xx (a, b, c) values ('a', 'b', 'c') 只能是单引号
2. 如果是int插⼊入的是string,报错(不不确定是否有类似SQL_MODE的参数)
3. 删除只⽀支持到⽉月纬度的分区
4. 改造官⽅方的启动脚本,不不要⽤用root直接启动
谁在⽤用
谁在⽤用
374 servers
store over 20.3 trillion rows
17 PBuncompressed data TSV
2 PBwithout counting duplication and replication
欧洲原⼦子能研究机构
store and process
 metadata on 10 billion
events with over
1000 attributes per event
Innovative provider of online retail
financial services in Russia
俄罗斯互联⽹网⾦金金融
谁在⽤用
《How Cloudflare analyzes 1M DNS queries per second》
• 做存储的公司
• Python驱动:infi.clickhouse_orm
谁在⽤用
• CARTO (formerly CartoDB) is a
Software as a Service (SaaS)
cloud computing platform that
provides GIS and web mapping
tools for display in a web
browser.
• Altinity is the leading service provider for ClickHouse
• ⾼高管来⾃自Percona、ClickHouse作者
• Altinity Provides Cloud Version of ClickHouse on
Kodiak Data MemCloud™ 提供云化的ClickHouse服务
• 开源MySQL实时同步数据到ClickHouse⼯工具
谁在⽤用
https://www.altinity.com/blog/
谁在⽤用
Blockchair is a blockchain
search and analytics engine
or you can also say
it's a blockchain explorer
on steroids. 
谁在⽤用
策导信息为⾦金金⻛风科技设计⽅方案
使⽤用21台ClickHouse
存储⻛风⼒力力发电机监控数据
ProxySQL⽀支持ClickHouse作为后端,
使⽤用MySQL协议访问
谁在关注
http://www.proxysql.com/blog/proxysql-143-clickhouse
Machine Learning
GBDT CatBoost
What's New
https://www.altinity.com/blog/2018/1/18/clickhouse-
我浪怎么⽤用?
CPU E5-2620 0 @ 2.00GHz 24 cores HT
48GB Memory
HDD 3TB*12 Raid5
CPU E5-2650 v4 @ 2.20GHz 48 cores HT
128GB Memory
HDD 4TB*12 Raid5
ZK
Used for Backup
架构部署
⼀一组做线上查询
⼀一组仅仅做备份
• Max rows
• 9.2 TB
• 14 Columns
• 190 Billion
• Max capacity
• 29 TB
• 94 Columns
• 80 Billion
• Daily most
• 12 TB
• 20 Columns
• 57 Billion
• 6 Billion/Day
使⽤用情况
•Superset
• Airbnb开源Python项目
• Apache孵化
• 快速实现可视化
• 完美对接ClickHouse,
方便分析师进行问题排查与分析
搭配
案例例
•某APP性能监控
DATA
•Python
• ClickHouse
• 图表、邮件、报警等
• Superset可视化工作台
• 数据处理链路短
• 数据实时可见,及时Trace
• 如何快速数据变现
• ES
• Hangout
• 问题排查,Trace
案例例
案例例
•某APP性能监控
案例例
•某APP性能监控
案例例
数据架构
• Hangout Plug-in:
• ⽀支持简单ETL操作,
• ⽀支持Kafka直达ClickHouse
• SQL调度组件:
• ⾃自动调度报表任务SQL,
• ⽀支持数据重跑等功能
• 数据⼊入库组件:
• 复杂ETL操作,清洗操作不不做⼊入库,
• 重新丢⼊入Kafka,异步批量量⼊入库
• 字典功能
• 固定映射,如省到ISO代码
• 汇率等变动的指标
• MySQL
案例例
• Python模块选择
• clickhouse-driver
案例例
CK监控
Prometheus
+
ClickHouse exporter
+
Grafana
https://github.com/f1yegor/clickhouse_exporter
最佳实践
1. CPU:多核优于主频
(SSE 4.2 instruction set need)
开启超线程、性能模式
2. ⼩小磁盘多机器器>⼤大磁盘少机器器
3. Raid-10 is better
If Raid5/6/50, increase stripe_cache_size
4. 内存:越⼤大越好,留留给page cache
禁⽤用swap/透明⼤大⻚页/NUMA
5. CentOS7/Ext4/复制带宽问题
1. batch insert 2K 起步
过多并发查询,不不是它的菜
2. ⽤用域名写本地表,读分布式表
3. 如果是Docker,注意修改时区
4. clickhouse-client在Docker⾥里里,
中⽂文乱码
5. 拒绝 select *
6. ⽆无Decimal,乘以倍率,⽤用Uint64存
运维 使⽤用
常⻅见问题
1. ClickHouse QPS怎么样?
• 分析型数据库,不不求⾼高QPS
2. 节点数困境:好加不不好减,骑⻁虎难下
3. 数据如何写⼊入?
• Hangout
• Python
4. 到底怎么做复制?
• 复制引擎
5. ⼀一次写多少?
• 太少了了影响Merge
• 太多了了异常时候丢的太多
6. 数据不不能删怎么办?
• 理理论上按⽉月删除
• 实际不不⽤用删除
总结
使⽤用场景


前提:对事务⽆无要求 ⽆无update操作 对响应时间有要求
特征:体量量⼤大 结构化
接⼝口:SQL Http API Py PHP R
案例例:⽇日志数据 ⼴广告曝光 IoT 监控数据
总结
Warning
ClickHouse如同⼀一台⼿手动挡的⻋车
想要跑的⼜又快⼜又稳,需要⽼老老司机
其他选项?
综合
MySQL:防⽌止撕逼、解放DBA的利利器器,从此告别容量量和慢查问题
预处理理类,Druid/Kylin等:保留留原始数据,防⽌止预先设定不不满⾜足需求
ES:⻅见后⽂文
HDFS⽣生态:简单、易易⽤用、查询快,但是,规模稳定性有待验证
对⽐比
对⽐比项 ES ClickHouse
数据接⼊入
插件丰富:hangout/logstash/filebeats

⽆无需特别指明字段类型,兼容性好
需要⾃自⼰己开发:JDBC、clickhouse-
client、Python导⼊入

Hangout to ClickHouse插件
查询
原⽣生查询⽅方式不不灵活

SQL插件复杂度有限

⼤大范围查询性能差
⽀支持复杂查询

⾼高级函数多

⽀支持连表查询
扩展性 旗⿎鼓相当,ES略略轻松,ClickHouse需要管理理表维度
其他
原⽣生API

社区健壮
原⽣生API

社区正在发展
语⾔言 Java/Python Java/Python/R/PHP
对⽐比ES
对⽐比-ES
数据量量
对⽐比-ES
对⽐比-ES
⾏行行业排名
对⽐比-GPU产品
GPU产品
http://tech.marksblogg.com/benchmarks.html
• World's most
advanced
GPU based
PostgreSQL
Database
• GPU Database
for Fast,
Interactive
Visual Analytics
• GPU-accelerated
analytics database for
real-time insights on
large and streaming
datasets
• High Performance GPU
Database for Big Data
SQL
74x to 3,500x faster than CPU DBs.
对⽐比-GPU产品
• PG-Strom is an
extension designed
for PostgreSQL v9.5
or later, to off-load a
part of CPU
intensive workloads
to GPU (Graphic
Processor Unit)
devices, and
execute them in
parallel
asynchronously.
对⽐比-GPU产品
对⽐比-开源与商业
开源产品
商业产品
性能与成本的均衡
对⽐比-开源与商业
结缘,
“那年年我还是个DBA ,饱受业务复杂查询,也就是OLAP之苦”
https://www.percona.com/
不不怕有坑?
不不试试
怎么知道好⽤用不不好⽤用
Summary
⼤大容量量结构化的数据

需要SQL

快速实现聚合、可视化
• But,如果,
• 不不好⽤用,别撕我~
• Last suggestion,
• Read the fuxxxing manual
资源推荐:
1. 官方文档 ⭐⭐⭐ 结构清晰,文档清楚,但是例子太少
2. Percona ClickHouse Blog ⭐⭐⭐⭐⭐
3. github issue & ClickHouse Google Group
4. ClickHouse服务提供商Altinity ⭐⭐⭐⭐⭐
5. 官方Meetup PPT ⭐⭐⭐⭐⭐
6. Altinity提供的rpm包 ⭐⭐⭐⭐⭐
7. 官方运维建议
8. 个人推荐PPT合集:百度网盘,密码yv72
9. 我的博客:简书 or github
10. http://www.clickhouse.com.cn/
JackpGao
gaopeng4@staff.sina.com.cn
请备注公司-姓名
打个⼴广告:
“可能是国内最领先的ClickHouse培训课程”

More Related Content

PDF
ClickHouse北京Meetup ClickHouse Best Practice @Sina
PDF
异常检测在苏宁的实践
PDF
Adventures in Observability - Clickhouse and Instana
PPTX
Introduction to Aerospike
PDF
Customer Segmentation Project
PDF
Building ZingMe News Feed System
PDF
ICCV 2019 論文紹介 (26 papers)
PDF
Introduction to Data Science
ClickHouse北京Meetup ClickHouse Best Practice @Sina
异常检测在苏宁的实践
Adventures in Observability - Clickhouse and Instana
Introduction to Aerospike
Customer Segmentation Project
Building ZingMe News Feed System
ICCV 2019 論文紹介 (26 papers)
Introduction to Data Science

What's hot (20)

PDF
データ分析を支える技術 データ分析基盤再入門
PDF
Data Engineering Meetup #1 持続可能なデータ基盤のためのデータの多様性に対する取り組み
PPTX
Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
PDF
SSII2022 [OS3-02] Federated Learningの基礎と応用
PDF
10 Good Reasons to Use ClickHouse
PDF
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
PDF
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
PDF
SparkやBigQueryなどを用いた モバイルゲーム分析環境
PDF
[db tech showcase Tokyo 2016] C32: 世界一速いPostgreSQLを目指せ!インメモリカラムナの実現 by 富士通株式会...
PDF
CUDAメモ
PDF
論文紹介:Temporal Action Segmentation: An Analysis of Modern Techniques
PDF
MongoDB〜その性質と利用場面〜
PDF
1-2-2 プラン・お支払い設定
PDF
ClickHouse Intro
PPTX
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
PPTX
Recommender systems for E-commerce
PDF
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
PDF
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
PDF
ClickHouse Deep Dive, by Aleksei Milovidov
PPTX
Data Cleaning Techniques
データ分析を支える技術 データ分析基盤再入門
Data Engineering Meetup #1 持続可能なデータ基盤のためのデータの多様性に対する取り組み
Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning
SSII2022 [OS3-02] Federated Learningの基礎と応用
10 Good Reasons to Use ClickHouse
Kafka・Storm・ZooKeeperの認証と認可について #kafkajp
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
SparkやBigQueryなどを用いた モバイルゲーム分析環境
[db tech showcase Tokyo 2016] C32: 世界一速いPostgreSQLを目指せ!インメモリカラムナの実現 by 富士通株式会...
CUDAメモ
論文紹介:Temporal Action Segmentation: An Analysis of Modern Techniques
MongoDB〜その性質と利用場面〜
1-2-2 プラン・お支払い設定
ClickHouse Intro
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
Recommender systems for E-commerce
PostgreSQLのパラレル化に向けた取り組み@第30回(仮名)PostgreSQL勉強会
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
ClickHouse Deep Dive, by Aleksei Milovidov
Data Cleaning Techniques
Ad

Similar to Data Analyse Black Horse - ClickHouse (13)

PDF
链家网大数据平台枢纽——工具链,吕毅
PDF
Douban qcon2009 beijing
PDF
Greenplum技术
PDF
09 赵昆
PPTX
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
PPTX
05 杨志丰
PPTX
Baidu LSP and DISQL for Log Analysis
PDF
Enterprise Data Lake in Action
PDF
Hadoop大数据实践经验
PDF
淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座
PPT
自下而上的数据仓库构建方法
PDF
准实时海量数据分析系统架构探究
PDF
Pyconf2014 lightening
链家网大数据平台枢纽——工具链,吕毅
Douban qcon2009 beijing
Greenplum技术
09 赵昆
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
05 杨志丰
Baidu LSP and DISQL for Log Analysis
Enterprise Data Lake in Action
Hadoop大数据实践经验
淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座
自下而上的数据仓库构建方法
准实时海量数据分析系统架构探究
Pyconf2014 lightening
Ad

Data Analyse Black Horse - ClickHouse