ClickHouse初级 - 第七章 分片集群

文章目录

    • [一、集群写入流程(3 分片 2 副本共 6 个节点)](#一、集群写入流程(3 分片 2 副本共 6 个节点))
    • [二、集群读取流程(3 分片 2 副本共 6 个节点)](#二、集群读取流程(3 分片 2 副本共 6 个节点))
    • [三、3 分片 2 副本共 6 个节点集群配置(供参考)](#三、3 分片 2 副本共 6 个节点集群配置(供参考))
    • 四、配置三节点版本集群及副本
      • [4.1 集群及副本规划(2 个分片,只有第一个分片有副本)](#4.1 集群及副本规划(2 个分片,只有第一个分片有副本))
      • [4.2 配置步骤](#4.2 配置步骤)
    • 五、项目为了节省资源,就使用单节点,不用集群
  • 副本虽然能够提高数据的可用性,降低丢失风险,但是每台服务器实际上必须容纳全量 数据,对数据的横向扩容没有解决。
  • 要解决数据水平切分的问题,需要引入分片的概念。通过分片把一份完整的数据进行切 分,不同的分片分布到不同的节点上,再通过 Distributed 表引擎把数据拼接起来一同使用。
  • Distributed 表引擎本身不存储数据 ,有点类似于 MyCat 之于 MySql,成为一种中间件,
    通过分布式逻辑表来写入、分发、路由来操作多台节点不同分片的分布式数据。
    注意:ClickHouse 的集群是表级别的,实际企业中,大部分做了高可用,但是没有用分 片,避免降低查询性能以及操作集群的复杂性。

一、集群写入流程(3 分片 2 副本共 6 个节点)

将internal_replication设置为true,distribute表只需要同步hdp1、hdp3和hdp5,副本的同步就使用hdp1、hdp3和hdp5来同步;如果是false,则6个节点数据都由distribute来同步,性能不高。

二、集群读取流程(3 分片 2 副本共 6 个节点)

errors_count表示在此节点读取数据发生的错误,比如网络等等

三、3 分片 2 副本共 6 个节点集群配置(供参考)

配置的位置还是在之前的/etc/clickhouse-server/config.d/metrika.xml,内容如下
注:也可以不创建外部文件,直接在 config.xml 的<remote_servers>中指定

java 复制代码
<yandex>
    <remote_servers>
<gmall_cluster> <!-- 集群名称--> <shard> <!--集群的第一个分片-->
                <internal_replication>true</internal_replication>
<!--该分片的第一个副本--> <replica>
                  <host>hadoop101</host>
<port>9000</port> </replica> <!--该分片的第二个副本--> <replica>
       <host>hadoop102</host>
       <port>9000</port>
    </replica>
</shard>
<shard> <!--集群的第二个分片--> <internal_replication>true</internal_replication> <replica> <!--该分片的第一个副本-->
       <host>hadoop103</host>
        <port>9000</port>
</replica>
<replica> <!--该分片的第二个副本-->
       <host>hadoop104</host>
       <port>9000</port>
    </replica>
</shard>
<shard> <!--集群的第三个分片--> <internal_replication>true</internal_replication> <replica> <!--该分片的第一个副本-->
       <host>hadoop105</host>
<port>9000</port>
</replica>
<replica> <!--该分片的第二个副本-->
       <host>hadoop106</host>
       <port>9000</port>
    </replica>
</shard>
        </gmall_cluster>
    </remote_servers>
</yandex>

四、配置三节点版本集群及副本

4.1 集群及副本规划(2 个分片,只有第一个分片有副本)

4.2 配置步骤

1)在 hadoop102 的/etc/clickhouse-server/config.d 目录下创建 metrika-shard.xml 文件
注:也可以不创建外部文件,直接在 config.xml 的<remote_servers>中指定

xml 复制代码
<?xml version="1.0"?>
<yandex>
	<remote_servers>
		<gmall_cluster> <!-- 集群名称-->
		
		<shard> <!--集群的第一个分片--> 
		<internal_replication>true</internal_replication>
		<replica> <!--该分片的第一个副本-->
		<host>hadoop102</host>
		       <port>9000</port>
		   </replica>
		<replica> <!--该分片的第二个副本--> 
		<host>hadoop103</host> <port>9000</port>
		   </replica>
		</shard>
		
		<shard> <!--集群的第二个分片--> 
		<internal_replication>true</internal_replication> 
			<replica> <!--该分片的第一个副本-->
		       <host>hadoop104</host>
		       <port>9000</port>
		   </replica>
		</shard>
		</gmall_cluster>
	</remote_servers>

	<zookeeper-servers>
	    <node index="1">
	        <host>hadoop102</host>
	        <port>2181</port>
	    </node>
	    <node index="2">
	        <host>hadoop103</host>
	        <port>2181</port>
	    </node>
    	<node index="3">
	        <host>hadoop104</host>
	        <port>2181</port>
        </node>
    </zookeeper-servers>
    
	<macros>
		<shard>01</shard> <!--不同机器放的分片数不一样--> 
		<replica>rep_1_1</replica> <!--不同机器放的副本数不一样-->
	</macros>
</yandex>

2)将 hadoop102 的 metrika-shard.xml 同步到 103 和 104
sudo /home/atguigu/bin/xsync /etc/clickhouse-server/config.d/metrika-shard.xml

3)修改 103 和 104 中 metrika-shard.xml 宏的配置

4)在 hadoop102 上修改/etc/clickhouse-server/config.xml

5)同步/etc/clickhouse-server/config.xml 到 103 和 104
sudo /home/atguigu/bin/xsync

/etc/clickhouse-server/config.xml
6)重启三台服务器上的 ClickHouse 服务

7)在 hadoop102 上执行建表语句

  • 会自动同步到hadoop103和hadoop104上
  • 集群名字要和配置文件中的一致
  • 分片和副本名称从配置文件的宏定义中获取
sql 复制代码
create table st_order_mt on cluster gmall_cluster (
   id UInt32,
sku_id String,
total_amount Decimal(16,2), create_time Datetime
 ) engine
=ReplicatedMergeTree('/clickhouse/tables/{shard}/st_order_mt','{replica}')
  partition by toYYYYMMDD(create_time)
  primary key (id)
  order by (id,sku_id);![请添加图片描述](https://img-blog.csdnimg.cn/direct/7d073b9d165545dea23c28fc875d4e72.png)

可以到 hadoop103 和 hadoop104 上查看表是否创建成功

8)在 hadoop102 上创建 Distribute 分布式表

sql 复制代码
create table st_order_mt_all2 on cluster gmall_cluster
(
	id UInt32,
	sku_id String,
	total_amount Decimal(16,2), 
    create_time Datetime
)engine = Distributed(gmall_cluster,default, st_order_mt,hiveHash(sku_id));

参数含义

  • Distributed(集群名称,库名,本地表名,
  • 分片键) 分片键必须是整型数字,所以用 hiveHash 函数转换,也可以 rand()
    9)在 hadoop102 上插入测试数据
sql 复制代码
insert into st_order_mt_all2 values
(201,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(202,'sku_002',2000.00,'2020-06-01 12:00:00'),
(203,'sku_004',2500.00,'2020-06-01 12:00:00'),
(204,'sku_002',2000.00,'2020-06-01 12:00:00'),
(205,'sku_003',600.00,'2020-06-02 12:00:00');

10)通过查询分布式表和本地表观察输出结果

  • 分布式表
    SELECT * FROM st_order_mt_all;
  • 本地表
    select * from st_order_mt;
  • 观察数据的分布

五、项目为了节省资源,就使用单节点,不用集群

不需要求改文件引用,因为已经使用集群建表了,如果改为引用 metrika-shard.xml 的话,启动会报错。我们以后用的时候只启动 102 即可。

相关推荐
weixin_307779133 小时前
Linux下GCC和C++实现统计Clickhouse数据仓库指定表中各字段的空值、空字符串或零值比例
linux·运维·c++·数据仓库·clickhouse
斯特凡今天也很帅1 天前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
SelectDB技术团队2 天前
从 ClickHouse、Druid、Kylin 到 Doris:网易云音乐 PB 级实时分析平台降本增效
大数据·数据仓库·clickhouse·kylin·实时分析
risc1234567 天前
【ClickHouse】RollingBitmap
clickhouse
斯特凡今天也很帅7 天前
clickhouse如何查看操作记录,从日志来查看写入是否成功
数据库·clickhouse
袖清暮雨12 天前
ClickHouse讲解
大数据·数据库·数据仓库·clickhouse·oracle
江枫渔火L13 天前
使用clickhouse的ReplacingMergeTree引擎表做活跃玩家信息表
数据库·clickhouse
潇凝子潇16 天前
Doris ClickHouse Greenplum 对比
clickhouse·doris·greenplum
递归尽头是星辰17 天前
ClickHouse核心优势分析与场景实战
大数据·数据仓库·clickhouse·实时分析·实时查询
鲁尼的小宝贝18 天前
基于Flink的数据中台管理平台
java·大数据·clickhouse·flink·yarn