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 即可。

相关推荐
波波仔861 天前
clickhouse表存储引擎
clickhouse·表存储引擎
波波仔861 天前
clickhouse存储和分区
clickhouse·排序·分区
波波仔861 天前
clickhouse insert与update区别
clickhouse·insert·update
波波仔861 天前
clickhouse简介
数据库·clickhouse
深色風信子1 天前
ClickHouse 快速入门
clickhouse·列式存储
波波仔861 天前
行存储与列存储的区别
数据库·clickhouse·行存储·列储存
吃喝不愁霸王餐APP开发者1 天前
霸王餐用户行为埋点:Kafka Connect+ClickHouse实时OLAP分析
分布式·clickhouse·kafka
honder试试2 天前
客户端连接Clickhouse连不上解决方案
java·clickhouse
honder试试3 天前
Centos7从0-1安装部署Clickhouse验证与Mysql实时同步
数据库·mysql·clickhouse
soft20015253 天前
ClickHouse 常见面试题
clickhouse