|NO.Z.00024|——————————|BigDataEnd|——|Hadoop&OLAP_ClickHouse.V05|——|ClickHouse.v05|ClickHouse:ClickHouse副本分片|副本|

一、副本和分片
### --- 副本

~~~     ReplicatedMergeTree
~~~     zk: 实现多个实例之间的通信。
### --- 副本的特点:作为数据副本的主要实现载体,ReplicatedMergeTree在设计上有一些显著特点:

~~~     # 依赖ZooKeeper:
~~~     在执行INSERT和ALTER查询的时候,
~~~     ReplicatedMergeTree需要借助ZooKeeper的分布式协同能力,以实现多个副本之间的同步。
~~~     但是在查询副本的时候,并不需要使用ZooKeeper。关于这方面的更多信息,会在稍后详细介绍。
~~~     # 表级别的副本:

~~~     副本是在表级别定义的,
~~~     所以每张表的副本配置都可以按照它的实际需求进行个性化定义,
~~~     包括副本的数量,以及副本在集群内的分布位置等。
~~~     # 多主架构(Multi Master):
~~~     可以在任意一个副本上执行INSERT和ALTER查询,它们的效果是相同的。
~~~     这些操作会借助ZooKeeper的协同能力被分发至每个副本以本地形式执行。

~~~     # Block数据块:
~~~     在执行INSERT命令写入数据时,
~~~     会依据max_insert_block_size的大小(默认1048576行)将数据切分成若干个Block数据块。
~~~     所以Block数据块是数据写入的基本单元,并且具有写入的原子性和唯一性。
~~~     # 原子性:
~~~     在数据写入时,一个Block块内的数据要么全部写入成功,要么全部失败。

~~~     # 唯一性:
~~~     在写入一个Block数据块的时候,会按照当前Block数据块的数据顺序、
~~~     数据行和数据大小等指标,计算Hash信息摘要并记录在案。
~~~     在此之后,如果某个待写入的Block数据块与先前已被写入的
~~~     Block数据块拥有相同的Hash摘要(Block数据块内数据顺序、数据大小和数据行均相同),
~~~     则该Block数据块会被忽略。这项设计可以预防由异常原因引起的Block数据块重复写入的问题。
~~~     如果只是单纯地看这些特点的说明,可能不够直观。
~~~     没关系,接下来会逐步展开,并附带一系列具体的示例。
二、副本和分片下:zk配置方式
### --- zk的配置方式

~~~     # 新建配置文件 /etc/clickhouse-server/config.d/metrika.xml
[root@hadoop01 ~]# vim /etc/clickhouse-server/config.d/metrika.xml
    <!--zookeeper集群配置信息 -->
    <zookeeper-servers>
        <node index="1">
            <host>hadoop01</host>
            <port>2181</port>
        </node>
        <node index="2">
            <host>hadoop02</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>hadoop03</host>
            <port>2181</port>
        </node>
    </zookeeper-servers>
### --- 修改配置文件/etc/clickhouse-server/config.xml

~~~     # 修改config.xml配置文件下zookeeper配置
[root@hadoop01 ~]# vim /etc/clickhouse-server/config.xml
 
 ~~~ 添加如下配置参数:333~334行
    <zookeeper incl="zookeeper-servers" optional="true" />
    <include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from>
三、副本和分片下:副本的形式定义表
### --- 副本的定义形式

~~~     # 语法
hadoop01 :) CREATE TABLE table_name(
            EventDate DateTime,
            CounterID UInt32,
            UserID UInt32
            ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}')
            PARTITION BY toYYYYMM(EventDate)
            ORDER BY (CounterID, EventDate, intHash32(UserID))
            SAMPLE BY intHash32(UserID);
### --- 创建一个副本表

~~~     # 创建一个表
hadoop01 :) create table replicated_sales_5 ( 
            id String, 
            price Float64, 
            create_time DateTime
            )ENGINE=ReplicatedMergeTree('/clickhouse/tables/01/replicated_sales_5','hadoop01')
            PARTITION BY toYYYYMM(create_time)
            ORDER BY id;
~~~     # 参数说明

~~~     ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/replicated_sales_5', 'hadoop01')
~~~     说明:/clickhouse/tables: 约定俗称的路径固定前缀
~~~     01:分片编号
~~~     replicated_sales_5:数据表的名字,建议与物理表名相同
~~~     hadoop01: 在zk中创建副本的名称,约定俗成使用服务器的名称。
### --- CH提供了一张zookeeper的代理表,可用通过SQL语句读取远端ZooKeeper的数据:

hadoop01 :) select * from system.zookeeper where path = '/clickhouse';

┌─name───┬─value─┬───────czxid─┬───────mzxid─┬───────────────ctime─┬───────────────mtime─┬─version─┬─cversion─┬─aversion─┬─ephemeralOwner─┬─dataLength─┬─numChildren─┬───────pzxid─┬─path────────┐
│ tables │       │ 64424509755644245097552021-11-04 19:00:132021-11-04 19:00:1301000164424509756 │ /clickhouse │
└────────┴───────┴─────────────┴─────────────┴─────────────────────┴─────────────────────┴─────────┴──────────┴──────────┴────────────────┴────────────┴─────────────┴─────────────┴─────────────┘
### --- 通过zk查看

[root@hadoop03 ~]# zkCli.sh

[zk: localhost:2181(CONNECTED) 0] ls /
[myKafka, zookeeper, clickhouse]
[zk: localhost:2181(CONNECTED) 1] ls /clickhouse
[tables]
[zk: localhost:2181(CONNECTED) 2] ls /clickhouse/tables
[01]
[zk: localhost:2181(CONNECTED) 4] ls /clickhouse/tables/01
[replicated_sales_5]
[zk: localhost:2181(CONNECTED) 5] ls /clickhouse/tables/01/replicated_sales_5
[metadata, temp, mutations, log, leader_election, columns, blocks, nonincrement_block_numbers, replicas, quorum, block_numbers]

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示