Clickhouse 学习笔记(6)—— ClickHouse 分片集群

前置知识:

Clickhouse学习笔记(5)------ ClickHouse 副本-CSDN博客

与副本对比:

副本虽然能够提高数据的可用性,降低丢失风险,但是每台服务器实际上必须容纳全量数据,对数据的横向扩容没有解决

要解决数据水平切分的问题,需要引入分片的概念。通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上 ,再通过Distributed 表引擎把数据拼接起来一同使用

Distributed 表引擎本身不存储数据,有点类似于 MyCat 之于 MySql,成为一种中间件,通过分布式逻辑表来写入、分发、路由来操作多台节点不同分片的分布式数据

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

一般来说internal_replication这一参数都是为true的,可以减轻distribute节点的压力

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

所谓errors_count就是在通信过程中产生错误的次数

集群配置流程(2分片 只有1个分片有副本 3节点)

集群架构示意

1.新建配置文件metrika-shard.xml

在hadoop102上,进入/etc/clickhouse-server/config.d

新建文件metrika-shard.xml

也可以不创建外部文件,直接在 config.xml 的<remote_servers>中指定

先文件中写入内容(hadoop102):

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>

hadoop103:(仅macros参数不同)

XML 复制代码
  <macros>
    <shard>01</shard> <!--不同机器放的分片数不一样-->
    <replica>rep_1_2</replica> <!--不同机器放的副本数不一样-->
  </macros>

hadoop104:(仅macros参数不同)

XML 复制代码
  <macros>
    <shard>02</shard> <!--不同机器放的分片数不一样-->
    <replica>rep_2_1</replica> <!--不同机器放的副本数不一样-->
  </macros>

2.修改config.xml

然后同步到hadoop103、104

3.重启服务

sudo clickhouse restart

查看是否启动成功:ps -ef | grep clickhouse

集群功能测试

在hadoop102创建表,会自动同步到hadoop103和104上

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);

其中on cluster后面要设置配置文件中自定义的集群名称

ReplicatedMergeTree中的分片和副本名称从配置文件的宏定义(marcos)中获取

可以看到在103和104上都有对应的表:

然后在 hadoop102 上创建 Distribute 分布式表

sql 复制代码
create table st_order_mt_all 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()

同样也可以同步到103和104上:

然后在hadoop102上插入数据:

sql 复制代码
insert into st_order_mt values\
(201,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(202,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(201,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(201,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(201,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(201,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(201,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(201,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(201,'sku_009',1000.00,'2020-06-01 12:00:00') ,\
(201,'sku_009',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');

查询分布式表和本地表即可得到结果;

相关推荐
IT小哥哥呀8 小时前
电池制造行业数字化实施
大数据·制造·智能制造·数字化·mom·电池·信息化
Xi xi xi8 小时前
苏州唯理科技近期也正式发布了国内首款神经腕带产品
大数据·人工智能·经验分享·科技
yumgpkpm8 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
UMI赋能企业9 小时前
制造业流程自动化提升生产力的全面分析
大数据·人工智能
TDengine (老段)10 小时前
TDengine 数学函数 FLOOR 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
派可数据BI可视化12 小时前
商业智能BI 浅谈数据孤岛和数据分析的发展
大数据·数据库·数据仓库·信息可视化·数据挖掘·数据分析
jiedaodezhuti12 小时前
Flink性能调优基石:资源配置与内存优化实践
大数据·flink
Lx35213 小时前
Flink窗口机制详解:如何处理无界数据流
大数据
Lx35213 小时前
深入理解Flink的流处理模型
大数据
Lx35214 小时前
Flink vs Spark Streaming:谁更适合你的实时处理需求?
大数据