点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
Hadoop(已更完)
HDFS(已更完)
MapReduce(已更完)
Hive(已更完)
Flume(已更完)
Sqoop(已更完)
Zookeeper(已更完)
HBase(已更完)
Redis (已更完)
Kafka(已更完)
Spark(已更完)
Flink(已更完)
ClickHouse(正在更新···)
章节内容
上节我们完成了如下的内容:
MergeTree 的最后一个:CollapsingMergeTree
ClickHouse 其他数据源:HDFS MySQL
附带实现案例
副本介绍
ReplicatedMergeTree
ZooKeeper:实现多个实例之间的通信。
副本的特点
作为数据副本的主要载体,ReplicatedMergeTree在设计上有一些缺点:
依赖ZooKeeper: 在执行INSERT和ALTER查询的时候,ReplicatedMergeTree需要借助ZooKeeper的分布式协同功能,以实现多个副本之间的同步。但是在查询副本的时候,并不需要ZooKeeper。
表级别的副本:副本是在表级别定义的,所以每张表的副本配置都可以按照它的实际需求进行个性化定义,包括副本的数量,以及副本在集群内的分布位置等。
多主架构(Multi Master):可以在任意一个副本上执行INSERT和ALTER查询,他们效果是相同的,这些操作会借助ZooKeeper的协同能力被分发至每个副本以本地的形式执行。
Block数据块,在执行INSERT命令写入数据时,会依据max_block_size的大小(默认1048576行)将数据切分成 若干个Block数据块。所以Block数据块是数据写入的基本单元,并且具有写入的原子性和唯一性。
原子性:在数据写入时,一个Block块内的数据要么全部写入成功,要不全部失败。
唯一性:在写一个Block数据块的时候,会按照当前Block数据块的数据顺序、数据行和数据大小等指标,计算Hash信息摘要并记录在案。在此之后,如果某个待写入的Block数据块与先前被写入的Block数据块拥有相同的Hash摘要(Block数据块内数据顺序、数据大小和数据行均相同),则该Block数据块会被忽略,这项设计可以预防由异常原因引起的Block数据块重复写入问题。
ZK的配置
之前配置
之前章节我们已经配置过了ZK,配置好了集群模式。
这里简单提一下,如果你没有做好,你需要回去之前的章节完成。
<yandex> <zookeeper-servers> <node index="1"> <host>h121.wzk.icu</host> <port>2181</port> </node> <node index="2"> <host>h122.wzk.icu</host> <port>2181</port> </node> <node index="3"> <host>h123.wzk.icu</host> <port>2181</port> </node> </zookeeper-servers> </yandex>
开启ZK
但是我们没有开启ZK,我们需要在配置文件中开启:
vim /etc/clickhouse-server/config.xml # 在之前配置的地方,再加入一行 <include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from> # 之前没有下面的一行 <zookeeper incl="zookeeper-servers" optional="true" />
配置结果如下图所示:
重启服务
systemctl restart clickhouse-server
检验结果
# 连接到ClickHouse clickhouse-client -m --host h121.wzk.icu --port 9001 --user default --password click
接着执行SQL检查是否成功链接到了 ZooKeeper
SELECT * FROM system.zookeeper WHERE path = '/'; • 1
执行结果如下图,如果你也是这样的没有报错,说明配置ZooKeeper服务成功!
集群配置
如果有需要,记得将其他的节点都按照如上配置方式配置完毕。
副本定义形式
创建新表
CREATE TABLE replicated_sales_5( `id` String, `price` Float64, `create_time` DateTime ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/replicated_sales_5', 'h121.wzk.icu') PARTITION BY toYYYYMM(create_time) ORDER BY id;
- /clickhouse/tables 约定俗成的路径
- /01/ 分片编号
- replicated_sales_5 数据表的名字 建议与物理表名字相同
- h121.wzk.icu 在ZK中创建副本的名称,约定俗成是服务器的名称
执行结果如下图所示:
查询结果
可以检查刚才的操作结果:
select * from system.zookeeper where path = '/clickhouse'; • 1
执行结果内容如下:
查看ZK
进入到ZK中,对数据进行查看:
zkCli.sh • 1
执行结果如下图所示: