clickhouse屬於OLAP數據庫,讀遠遠多於寫[]
根據[1]
Clickhouse 僅支持 Linux 操作系統,且機器 CPU 必須支持 SSE 4.2 指令集。
引擎 | 介紹 |
MergeTree | 是CK裏最Advanced的引擎,性能超高,單機寫入可以達到50w峯值,查詢性能非常快 |
ReplicatedMergeTree | 基於MergeTree,同時引入ZK,做了複製 |
Distributed | 分佈式引擎,本身不存儲數據,可認爲就是一張View,如果寫入,會把請求丟到集羣裏的節點(有算法控制),如果查詢,會幫你做查詢轉發再聚合返回 |
一些常用技巧歸納:
技巧 | 方法 |
clickhouse試用(官方提供了一個節點) | https://play.clickhouse.tech/ |
集羣clickhouse報錯信息地址(必須使用root權限才能看到log信息,否則空白一片) | /var/log/clickhouse-server/* |
查看進程 |
service clickhouse-server status |
#-----------------clickhouse應用場景[1]---------------------------
- 絕大多數請求都是用於讀訪問的
- 數據需要以大批次(大於1000行)進行更新,不是單行更新;或者根本沒有更新操作
- 數據只是添加到數據庫,沒有必要修改
- 讀取數據時,會從數據庫中提取出大量的行,但只用到一小部分列
- 表很“寬”,即表中包含大量的列
- 查詢頻率相對較低(通常每臺服務器每秒查詢數百次或更少)
- 對於簡單查詢,允許大約50毫秒的延遲
- 列的值是比較小的數值和短字符串(例如,每個>URL只有60個字節)
- 在處理單個查詢時需要高吞吐量(每臺服務器每秒>高達數十億行)
- 不需要事務
- 數據一致性要求較低
- 每次查詢中只會查詢一個大表。除了一個大表,其>餘都是小表
- 查詢結果顯著小於數據源。即數據有過濾或聚合。返回結果不超過單個服務器內存大小
#-------------clickhouse的限制[1]------------------------------
- 支持真正的刪除/更新支持 不支持事務(期待後續版本支>持)
- 不支持二級索引
- 有限的SQL支持,join實現與衆不同
- 不支持窗口功能
- 元數據管理需要人工干預維護
#------------------------------------------------------
簡單分佈式方案[1]
MergeTree + Distributed
CREATE TABLE db.tb (date Date, ……) ENGINE = MergeTree(date, (date, hour, datetime), 8192)
CREATE TABLE db.tb_all (date Date, ……) ENGINE = Distributed(bip_ck_cluster, 'ck_test', 'dagger', rand())"
建表語句 | 備註 |
CREATE TABLE db.tb (date Date, ……) ENGINE = MergeTree(date, (date, hour, datetime), 8192) | db.tb爲本地表,數據只是在本地 |
CREATE TABLE db.tb_all (date Date, ……) ENGINE = Distributed(bip_ck_cluster, 'ck_test', 'dagger', rand())" | db.tb_all爲分佈式表,查詢這個表,引擎自動把整個集羣數據計算後返回 |
#------------------------------------------------------
[2]clickhouse的集羣涉及到三個文件,如果是自己一個人負責,
那麼config.xml和users.xml是不需要修改的,因爲都是性能參數,而不是架構部署相關的參數.
配置文件 | 作用 |
config.xml | 全局信息配置文件(可選) |
users.xml | 用戶信息配置文件(可選) |
metrika.xml | 集羣信息配置文件(必須配置) |
zookeeper按照[3]先搭建好,
一個簡易的clickhouse分佈式架構如下:
role |
shard1 |
shard2 |
集羣 |
---|---|---|---|
replica |
192.168.1.1(Desktop) |
192.168.1.3(Laptop) |
集羣1 |
replica |
192.168.1.2 |
192.168.1.4 |
集羣2 |
上述圖和表格是互相對應的(務必看懂),我的手上是一臺臺式機(Desktop)和一臺筆記本(Laptop),
所以兩個節點就可以搭建分佈式clickhouse集羣了.
配置時注意,不要無腦拷貝配置文件,配置文件中每一句話都要看懂
#-------------------配置文件中一個不太好理解的地方-------------------
metrika.xml中有個不太好理解的地方[5]:
<macros>
<layer>01</layer>
<shard>03</shard> <!--表示cluster01集羣的03分片下的1號副本-->
<replica>cluster01-03-1</replica>
</macros>
上面的配置什麼意思?
01集羣的03號分片,
這個分片名字叫做cluster01-03-1
本節點保存這個分片.
同一個{layer}-{shard}下面的表互爲備份,會自動同步[6]
replica是備份序號的識別符,必須互不相同,可以設置爲與該節點hostname相同[6]
#--------------------完整metrika.xml如下-----------------------
這裏分片不打算備份(節省資源)
<yandex>
<!--ck集羣節點-->
<clickhouse_remote_servers>
<clickhouse_cluster_name>
<!--分片1:一個節點的兩次:原件和複印件-->
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>Desktop</host>
<port>9500</port>
<user>appleyuchi</user>
<password>appleyuchi</password>
<compression>true</compression>
</replica>
<!--複製集1:複印件,資源有限,所以這裏註釋掉-->
<!-- <replica>
<host>192.68.1.2</host>
<port>9000</port>
<user>default</user>
<password>password</password>
</replica> -->
</shard>
<!-- 一個節點對應一個分片以及分片備份 -->
<!--分片2-->
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>Laptop</host>
<port>9500</port>
<user>appleyuchi</user>
<password>appleyuchi</password>
<compression>true</compression>
</replica>
<!--複製集2:複印件,資源有限,所以這裏註釋掉-->
<!-- <replica>
<host>192.68.1.4</host>
<port>9000</port>
<user>default</user>
<password>password</password>
</replica>
-->
</shard>
</clickhouse_cluster_name>
</clickhouse_remote_servers>
<!--zookeeper相關配置-->
<zookeeper-servers>
<node index="1">
<host>Desktop</host>
<port>2181</port>
</node>
<node index="2">
<host>Laptop</host>
<port>2182</port>
</node>
<node index="3">
<host>Laptop</host>
<port>2183</port>
</node>
</zookeeper-servers>
<!-- 兩級分片,下面這個東西就是上面shard的一個身份ID,只是做個標記-->
<macros>
<layer>01</layer>
<shard>01</shard> <!--分片號-->
<replica>Desktop</replica> <!--當前節點IP-->
</macros>
<networks>
<ip>::/0</ip>
</networks>
<!--壓縮相關配置-->
<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method> <!--壓縮算法lz4壓縮比zstd快, 更佔磁盤-->
</case>
</clickhouse_compression>
</yandex>
上述配置文件的內容主要就是集羣的各個分片(shard)所保存的節點數據(replica).
在Laptop節點,上述內容需要修改以下部分:
<macros>
<layer>01</layer>
<shard>01</shard> <!--分片號-->
<replica>Desktop</replica> <!--當前節點IP-->
</macros>
#------------------------------------------------------
/etc/clickhouse-server/config.xml中加入
<yandex>
.....
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
</yandex>
#------------------------------------------------------
在集羣中各個節點,分別執行
service clickhouse-server start
#------------------------------------------------------
啓動時集羣中各個節點必須有的進程:
域名 | jps |
Desktop | 6576 NameNode 7601 ResourceManager 6757 DataNode 7847 NodeManager 72826 Jps 7324 QuorumPeerMain |
Laptop | 2243 NodeManager 2133 QuorumPeerMain 2038 DataNode 9550 Jps 2287 QuorumPeerMain |
#-----------啓動時集羣中各個節點的服務狀態-----------------------
root@Desktop:/home/appleyuchi# service clickhouse-server status
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-06-19 17:08:13 CST; 4min 11s ago
Main PID: 70583 (clickhouse-serv)
Tasks: 68 (limit: 4915)
Memory: 1.9G
CGroup: /system.slice/clickhouse-server.service
└─70583 /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Including configuration file '/etc/clickhouse-server/metrika.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Logging trace to /var/log/clickhouse-server/clickhouse-server.log
6月 19 17:08:13 Desktop clickhouse-server[70583]: Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log
6月 19 17:08:13 Desktop clickhouse-server[70583]: Processing configuration file '/etc/clickhouse-server/users.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Merging configuration file '/etc/clickhouse-server/users.d/default-password.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Include not found: networks
6月 19 17:08:13 Desktop clickhouse-server[70583]: Saved preprocessed configuration to '/var/lib/clickhouse//preprocessed_configs/users.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Processing configuration file '/etc/clickhouse-server/config.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Including configuration file '/etc/clickhouse-server/metrika.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Saved preprocessed configuration to '/var/lib/clickhouse//preprocessed_configs/config.xml'.
#------------------------------------------------------
連接命令:
clickhouse-client --host localhost -u default --password
查看集羣信息命令:
SELECT * FROM system.clusters
集羣信息如下:
表中每一行表示一個節點的信息,
第一列表示,如果兩行的第一列名字相同,那麼這兩行所代表的節點屬於同一個集羣
最後,關於上述配置的很多解釋性的信息可以[9]中找到
############################################################################################
來自釘釘羣的一些答疑解惑:
Reference: