zk目录结构

ClickHouse配置信息

创建基于zk的ClickHouse集群(3zk-2shards-2replicas),主要信息如下:

<?xml version="1.0" encoding="utf-8"?>
<yandex><clickhouse_remote_servers><default><shard><internal_replication>true</internal_replication><replica><host>172.17.0.8</host><port>9000</port></replica><replica><host>172.17.0.7</host><port>9000</port></replica></shard><shard><internal_replication>true</internal_replication><replica><host>172.17.0.6</host><port>9000</port></replica><replica><host>172.17.0.5</host><port>9000</port></replica></shard></default></clickhouse_remote_servers><zookeeper-servers><node index="1"><host>172.17.0.4</host><port>2181</port></node><node index="2"><host>172.17.0.3</host><port>2181</port></node><node index="3"><host>172.17.0.2</host><port>2181</port></node></zookeeper-servers><listen_host>::</listen_host><listen_host>0.0.0.0</listen_host><listen_try>1</listen_try><macros><shard>1</shard><replica>172.17.0.8</replica></macros>
</yandex>

其它3个实例的macros会不同

然后创建ReplicatedMergeTree表,Distributed表,再插入5条记录,如下:

CREATE TABLE log_test ON CLUSTER default
(ts  DateTime,uid String,biz String
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/log_test','{replica}') PARTITION BY toYYYYMMDD(ts) ORDER BY (ts) SETTINGS index_granularity = 8192;CREATE TABLE log_test_all  ON CLUSTER default(ts  DateTime,uid String,biz String
) ENGINE= Distributed(default, default, log_test, rand());INSERT INTO log_test VALUES ('2019-06-07 20:01:01', 'a', 'show');
INSERT INTO log_test VALUES ('2019-06-07 20:01:02', 'b', 'show');
INSERT INTO log_test VALUES ('2019-06-07 20:01:03', 'a', 'click');
INSERT INTO log_test VALUES ('2019-06-08 20:01:04', 'c', 'show');
INSERT INTO log_test VALUES ('2019-06-08 20:01:05', 'c', 'click');select * from log_test;
select * from log_test_all;

最终zk的目录结构为

clickhouse
└── tables├── 1│   ├── log_test│   │   ├── metadata #log_test表的元数据信息│   │   ├── temp #临时节点,存储过程中的临时数据│   │   └── mutations #表的变更信息,ClickHouse为区别标准SQL特定的一个名词│   ├── log  #写block时记录的log│   │   ├── log-0000000003│   │   ├── log-0000000001│   │   └── log-0000000002│   ├── leader_election #副本选举leader时使用│   │   ├── leader_election-0000000001│   │   └── leader_election-0000000003│   ├── colums #列信息│   ├── blocks #和log是对应的,用于block去重│   │   ├── 201908_12150410223201606212_2366670524718677664│   │   ├── 201908_15367370223201604745_5325320524718463637│   │   └── 201907_34543779872932958925_1436457470273464774│   ├── nonincrement_block_numbers│   ├── replicas #存储各个副本的相关信息│   │   └── 10.0.0.71 │   │         ├── is_lost #标记副本是否过时│   │         ├── metadata  #log_test表的元数据信息│   │         ├── is_active #标记副本是否存活│   │         ├── mutation_pointer│   │         ├── colums #列信息│   │         ├── max_processed_insert_time│   │         ├── host  #主机名或域名│   │         ├── parts  #存储数据所有的parts│   │         │   └── 201908_0_0_0│   │         │          ├── checksums│   │         │          └── colums│   │         ├── flags #用于数据恢复│   │         ├── log_pointer #log指针│   │         ├── min_unprocessed_insert_time│   │         └── queue #临时处理队列│   ├── quorum  #与是否配置insert_quorum有关│   │   ├── last_part│   │   └── failed_parts│   └── block_number #存储所有的分区值,会根据merge实时更新│          └── 201908└─ 2

目录说明

根目录:/clickhouse/tables

下一级时是分片信息目录,其中的12是根据配置中的shard生成的

<macros><shard>1</shard>
</macros>

分片信息目录中包括所有的表目录,例如:

/clickhouse/tables/1/log_test
/clickhouse/tables/1/log_test2
/clickhouse/tables/1/log_test3
...

/clickhouse/tables/1/log_test为例,log_test表目录包含以下节点,可以通过zkCli.shls命令查看

[metadata, temp, mutations, log, leader_election, columns, blocks, nonincrement_block_numbers, replicas, quorum, block_numbers]

表目录说明

metadata

存的是log_test表的元数据信息,如下:

metadata format version: 1
date column:
sampling expression:
index granularity: 8192
mode: 0
sign column:
primary key: ts
data format version: 1
partition key: toYYYYMMDD(ts)
granularity bytes: 10485760

temp

临时目录,用于存储ck工作时的一些临时文件的存储,比如mutation过程等

mutations

记录数据的变更,ClickHouse的更新和删除的语法是非标准SQL,新的更新和删除是异步执行的批处理操作,自定义了这样一个名字是为了与传统SQL做区分。

正常情况下这个节点是没有数据的,但如果执行了

ALTER TABLE log_test UPDATE uid='aa' where uid='a';

此时在mutations下会多一个0000000000节点,信息为:

format version: 1
create time: 2020-03-25 07:45:08
source replica: 172.17.0.8
block numbers count: 2
20190607    3
20190608    2
commands: UPDATE uid = \'aa\' WHERE uid = \'a\'
alter version: -1

log

每一个insert语句(严格来说是每一个block)就会生成一个log文件,无论哪个副本写入数据都会产生log,其他副本会watch这个节点去检查自己的数据是否有延迟,如果有会去同分片有该数据的副本中去clone

log-0000000005 中的信息,如下:

format version: 4
create_time: 2020-03-24 15:21:28
source replica: 172.17.0.7
block_id: 20190909_7580776809554376778_6946384220985995348
get
20190909_0_0_0

leader_election

决定哪个副本作为主副本,查询时优先选择该副本,另一个副本根据这个副本同步,在同步过程中还有很多逻辑判断,是否要重新选主,主副本是否是最新的等等,这里不细说。这里包含所有可用的副本

leader_election-0000000003 中的信息,如下:

172.17.0.8

这个值也是根据配置文件生成的

<macros><replica>172.17.0.8</replica>
</macros>

leader_election-xxxx是临时节点,如果实例异常,会自动删除,如果实例恢复,会再次写入。如何知道哪个replica是leader可以通过查询system.replicas的is_leader,为1则为leader,为0则不是leader,该表还有个can_become_leader字段标明是否可以成为leader,这个就与副本延迟程度有关了

columns

存储了该表有哪些列,信息如下:

columns format version: 1
3 columns:
`ts` DateTime
`uid` String
`biz` String

blocks

和logs是对应的,log里面包含着block_id,这个id会存一定的数量,作用是为了数据去重,它的格式是patition_hash[0]_hash[1],就是通过hash值来判断是否重复,如果有重复就不再向zk插入相关数据的元信息

20190608_12150410223201606212_2366670524718677664中的信息是:

20190608_0_0_0

这里就对应着/var/lib/clickhouse/data/default/log_test/20190608_0_0_0这个part

replicas

存储各个副本的相关信息,节点的名称也是根据这个值也是根据配置文件生成的

<macros><replica>172.17.0.8</replica>
</macros>

172.17.0.8目录包含

[is_lost, metadata, is_active, mutation_pointer, columns, max_processed_insert_time, host, parts, flags, log_pointer, min_unprocessed_insert_time, queue]

每个节点的作用:

  • is_lost:标记副本是否过时,依据log_pointer是否是最新的,0为正常,-1为过时,1为修复中

  • metadata:元数据信息,同上述的metadata

  • is_active:是否存活,如果服务器异常,会不存在这个节点,恢复后会重新添加进来

  • columns:列信息

  • max_processed_insert_time:最大的insert执行时间

  • host:主机名或域名

  • parts:存储数据的所有parts,每个part中包含checksums和columns信息

  • flags:主要用于强制数据恢复

  • log_pointer:log指针,标记该副本应该处理的log-xxx是哪个

  • min_unprocessed_insert_time:最小的未处理的延时时间

  • queue:插入数据量大时,数据会添加到队列中

quorum

与是否配置insert_quorum 有关

block_numbers

存储所有的分区,会根据merge实时更新

【ClickHouse系列】ClickHouse之zk目录结构说明相关推荐

  1. [Android系列—] 2. Android 项目目录结构与用户界面的创建

    前言 在 [Android系列-] 1. Android 开发环境搭建与Hello World 这一篇中介绍了如何快速搭建Android开发环境, 并成功了建立一个没有任何代码更改的 Android ...

  2. React系列---React+Redux工程目录结构划分

    按角色组织 如果你用MVC框架开发过应用,应该知道MVC框架之下,通常有这样一种代码组织方式: controllers/todoController.jsfilterController.js mod ...

  3. Storm zk目录结构

    转自:http://xumingming.sinaapp.com/466/twitter-storm-code-analysis-zookeeper-dirs/ 我们知道Twitter Storm的所 ...

  4. ClickHouse系列教程三:MergeTree引擎分析

    ClickHouse系列教程: ClickHouse系列教程 Clickhouse之MergeTree引擎分析 CRUD Clickhouse支持查询(select)和增加(insert),但是不直接 ...

  5. ClickHouse 系列教程五:多种连接方法

    文章目录 clickhouse-client HTTP 接口 JDBC Python接口 ClickHouse系列教程: ClickHouse系列教程 clickhouse-client 你可以通过c ...

  6. ClickHouse系列教程八:从一个服务器导入4T数据到另外一个服务器

    ClickHouse系列教程: ClickHouse系列教程 遇到了一个问题,就是如何把数据从一个服务器导入到另外一个服务器. 最初的想法是把数据都导出到CSV文件,然后再从CSV文件导入,做法如下: ...

  7. ClickHouse系列教程七:centos下源码编译安装及报错解决

    ClickHouse系列教程: ClickHouse系列教程 参考上一篇博客: ClickHouse系列教程六:源码分析之Debug编译运行 先安装 gcc 8, g++ 8, cmake 3, ni ...

  8. ClickHouse系列教程六:源码分析之Debug编译运行

    ClickHouse系列教程: ClickHouse系列教程 根据官方文档的编译教程:How to Build ClickHouse on Linux - ClickHouse Documentati ...

  9. ClickHouse系列教程

    ClickHouse系列教程一:Debian/Ubuntu 下ClickHouse的安装和使用 ClickHouse系列教程二:使用航班飞行数据 ClickHouse系列教程三:MergeTree引擎 ...

最新文章

  1. javascript焦点图(根据图片下方的小框自动播放)
  2. 计算机组装大赛队名,比赛项目设计及评分标准-中国海员技能大比武.DOC
  3. 【快乐水题】709. 转换成小写字母
  4. 吃下去的东西老是往上翻上来_这间日日火爆的面馆,当年海藻带宋思明吃过
  5. web测试点总结---UI、兼容、功能、交互、安全、性能、接口测试
  6. 【深入浅出MyBatis系列十一】缓存源码分析
  7. 11 Interior-point methods and Conclusions
  8. DefaultIfEmpty
  9. 每天Leetcode 刷题 初级算法篇-打乱数组
  10. 使用TScopy访问已锁定的文件
  11. 计算机设置页眉教案,设置页眉页脚——教学设计-20210318083746.docx-原创力文档
  12. 如何使用电脑注册微博登陆模拟器
  13. 纬度、经度和坐标系网格
  14. 火狐控制台的html,怎么使用火狐浏览器调试网页
  15. 实体认证与身份识别概述
  16. Python的seek函数
  17. Win32 OpenGL 编程
  18. memsql-官宣世界最快的内存关系型数据库安装部署
  19. centos7升级Apache2.4.6到2.4.54
  20. 人工智能在生物学和神经科学中的应用

热门文章

  1. 职责过多如何向上管理
  2. 为什么局部内部类访问外边的局部变量必须为final?
  3. archlinux常用软件推荐(2020年6月更新)
  4. Google产品中的那些搞笑提示
  5. 全国计算机二级考试ACCESS入门教程
  6. CEF 破解内存超过1G 崩溃白屏现象
  7. VMware虚拟机设置统一网段
  8. 论打野的自我修养(二) 节奏
  9. 什么是软件架构视图 4+1视图
  10. 6年时间经历8家公司,我的数据科学从业心得