ClickHouse的分片和副本

1.副本

副本的目的主要是保障数据的高可用性,即使一台ClickHouse节点宕机,那么也可以从其他服务器获得相同的数据。

Data Replication | ClickHouse Docs

1.副本写入流程

1.配置步骤

(1)启动zookeeper集群

(2)在hadoop102的/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml的配置文件,内容如下:

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

<?xml version="1.0"?>

<yandex>

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

</yandex>

(3)同步到hadoop103和hadoop104上

sudo /home/atguigu/bin/xsync /etc/clickhouse-server/config.d/metrika.xml

(4)在 hadoop102的/etc/clickhouse-server/config.xml中增加

<zookeeper incl="zookeeper-servers" optional="true" />

<include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from>

(5)同步到hadoop103和hadoop104上

sudo /home/atguigu/bin/xsync /etc/clickhouse-server/config.xml

分别在hadoop102和hadoop103上启动ClickHouse服务

注意:因为修改了配置文件,如果以前启动了服务需要重启

[atguigu@hadoop102|3 ~]$ sudo clickhouse restart

注意:我们演示副本操作只需要在hadoop102和hadoop103两台服务器即可,上面的操作,我们hadoop104可以你不用同步,我们这里为了保证集群中资源的一致性,做了同步。

(6)在hadoop102和hadoop103上分别建表

副本只能同步数据,不能同步表结构,所以我们需要在每台机器上自己手动建表

hadoop102

create table t_order_rep2 (

    id UInt32,

    sku_id String,

    total_amount Decimal(16,2),

    create_time  Datetime

 ) engine =ReplicatedMergeTree('/clickhouse/table/01/t_order_rep','rep_102')

partition by toYYYYMMDD(create_time)

   primary key (id)

   order by (id,sku_id);

hadoop103

create table t_order_rep2 (

    id UInt32,

    sku_id String,

    total_amount Decimal(16,2),

    create_time  Datetime

 ) engine =ReplicatedMergeTree('/clickhouse/table/01/t_order_rep','rep_103')

   partition by toYYYYMMDD(create_time)

   primary key (id)

   order by (id,sku_id);

③参数解释

ReplicatedMergeTree 中,

第一个参数是分片的zk_path一般按照: /clickhouse/table/{shard}/{table_name} 的格式写,如果只有一个分片就写01即可。

第二个参数是副本名称,相同的分片副本名称不能相同。

(7)在hadoop102上执行insert语句

insert into t_order_rep2 values

(101,'sku_001',1000.00,'2020-06-01 12:00:00'),

(102,'sku_002',2000.00,'2020-06-01 12:00:00'),

(103,'sku_004',2500.00,'2020-06-01 12:00:00'),

(104,'sku_002',2000.00,'2020-06-01 12:00:00'),

(105,'sku_003',600.00,'2020-06-02 12:00:00');

(8)在hadoop103上执行select,可以查询出结果,说明副本配置正确

2.分片集群

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

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

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

注意ClickHouse的集群是表级别的实际企业中大部分做了高可用但是没有用分片,避免降低查询性能以及操作集群的复杂性。

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

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

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

配置的位置还是在之前的/etc/clickhouse-server/config.d/metrika.xml,内容如下

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

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

2.配置三节点版本集群及副本

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

hadoop102

hadoop103

hadoop104

<macros>

<shard>01</shard> 

<replica>rep_1_1</replica>

</macros>

<macros>

<shard>01</shard> 

<replica>rep_1_2</replica>

</macros>

<macros>

<shard>02</shard> 

<replica>rep_2_1</replica>

</macros>

2.4.2 配置步骤

1)在hadoop102的/etc/clickhouse-server/config.d目录下创建metrika-shard.xml文件

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

<?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宏的配置

(1)103

[atguigu@hadoop103 ~]$ sudo vim /etc/clickhouse-server/config.d/metrika-shard.xml

(2)104

[atguigu@hadoop104 ~]$ sudo vim /etc/clickhouse-server/config.d/metrika-shard.xml

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

5)同步/etc/clickhouse-server/config.xml103和104

[atguigu@hadoop102 ~]$ sudo /home/atguigu/bin/xsync /etc/clickhouse-server/config.xml

6)重启三台服务器上的ClickHouse服务

[atguigu@hadoop102 clickhouse-server]$ sudo clickhouse restart

[atguigu@hadoop102 clickhouse-server]$ ps -ef |grep click

7)在hadoop102上执行建表语句

  • 会自动同步到hadoop103和hadoop104上
  • 集群名字要和配置文件中的一致
  • 分片和副本名称从配置文件的宏定义中获取

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

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

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

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,defaultst_order_mt,hiveHash(sku_id));

参数含义:

Distributed集群名称库名本地表名分片键

分片键必须是整型数字,所以用hiveHash函数转换,也可以rand()

9)在hadoop102上插入测试数据

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)通过查询分布式表和本地表观察输出结果

(1)分布式表

SELECT *  FROM st_order_mt_all;

(2)本地表

select * from st_order_mt;

(3)观察数据的分布

st_order_mt_all

hadoop102:

st_order_mt

hadoop103:

st_order_mt

hadoop104:

st_order_mt

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/159233.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

异常

文章目录 概念体系结构分类处理抛异常捕获异常throws 异常声明try-catch 异常捕获finally 异常处理流程自定义异常 概念 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常。 比如: 算术异常 Exception in thread "main" java.lang.ArithmeticExcept…

C/C++---------------LeetCode第LCR. 024.反转链表

反转链表 题目及要求双指针 题目及要求 双指针 思路&#xff1a;遍历链表&#xff0c;并在访问各节点时修改 next 引用指向&#xff0c;首先&#xff0c;检查链表是否为空或者只有一个节点&#xff0c;如果是的话直接返回原始的头节点&#xff0c;然后使用三个指针来迭代整个…

最新自动定位版本付费进群系统源码

更新内容&#xff1a; 1.在网站首页增加了付款轮播功能。 2.新增了城市定位功能&#xff0c;方便用户查找所在城市的相关信息。 3.对域名库及支付设置进行了更新和优化。 4.增加了一种图模板设置模式&#xff0c;简化了后台模板设置流程。 5.此外还进行了前后台的其他优化…

二进制分析工具-radare2使用教程

二进制分析工具-radare2使用教程 按照如下执行命令 按照如下执行命令 r2 -A 二进制文件

智慧物流追踪:打造未来的物流网络

随着互联网和物流行业的深度融合&#xff0c;智慧物流已成为现代物流发展的新趋势。通过开发一款智能化的物流追踪app小程序&#xff0c;我们不仅可以提高物流效率&#xff0c;还可以为客户提供更加便捷的服务。本文将从市场需求、技术应用、竞争优势、行业前景等方面对智慧物流…

upload-labs(1-17关攻略详解)

upload-labs pass-1 上传一个php文件&#xff0c;发现不行 但是这回显是个前端显示&#xff0c;直接禁用js然后上传 f12禁用 再次上传&#xff0c;成功 右键打开该图像 即为位置&#xff0c;使用蚁剑连接 连接成功 pass-2 源码 $is_upload false; $msg null; if (isse…

达尔优EK87键盘说明书

EK87说明书连接说明&#xff1a; **有线模式&#xff1a;**开关拨到最右边&#xff0c;然后插线连接电脑即可使用 2.4G **接收器模式&#xff1a;**开关拨到中间&#xff0c;然后接收器插入电脑USB接口即可使用 **蓝牙模式&#xff1a;**开关拨到最左边&#xff0c;然后按FNQ长…

【面试经典150 | 数学】加一

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;加一 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结…

一文看分布式锁

为什么会存在分布式锁&#xff1f; 经典场景-扣库存&#xff0c;多人去同时购买一件商品&#xff0c;首先会查询判断是否有剩余&#xff0c;如果有进行购买并扣减库存&#xff0c;没有提示库存不足。假如现在仅存有一件商品&#xff0c;3人同时购买&#xff0c;三个线程同时执…

Apache DolphinScheduler在通信行业的多集群统一建设与管理实践

背景介绍 为什么我们考虑构建统一的调度平台&#xff1f; 主要原因是&#xff1a;我们公司的大数据中心目前拥有七个大数据集群&#xff0c;这些集群分布在不同的机房&#xff0c;例如内蒙、南京、苏州和广州。而且&#xff0c;这些机房之间的网络并不互通。如果每个集群都独立…

基于SSM的项目管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

4核8G服务器价格选择轻量还是CVM合适?

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

各机构如何加强网络渗透、“渗透”防御

数据渗透&#xff0c;例如黑客攻击和“渗透”&#xff0c;或未经授权的信息传输。 联邦调查局、国家安全局以及网络安全和基础设施安全局最近的联合报告证明&#xff0c;网络安全仍然是当今国防部门面临的两个最大的网络威胁。 所谓的零日攻击尤其有害&#xff0c;因为组织在…

DMA原理和应用

目录 1.什么是DMA 2.DMA的意义 3.DMA搬运的数据和方式 4.DMA 控制器和通道 5.DMA通道的优先级 6.DMA传输方式 7.DMA应用 实验一: 内存到内存搬运 CubeMX配置&#xff1a; ​编辑用到的库函数&#xff1a; 代码实现思路&#xff1a; 实验二: 内存到外设搬运 CubeMX…

VR智慧景区:VR赋能文旅产业,激活消费潜能

随着国家数字化战略的不断深入实施&#xff0c;文旅产业数字化转型的步伐也在逐渐加快&#xff0c;以VR技术赋能文旅产业&#xff0c;让文旅景区线上线下双渠道融合&#xff0c;进一步呈现文化底蕴、激活消费潜能。 VR智慧景区以沉浸式、互动式、科技感的方式&#xff0c;将景区…

Vellum —— Constraint 约束

目录 Stretch Bend Pin Drag 解算器对DOP外节点的约束属性&#xff0c;只会读取起始帧的值&#xff1b; Stretch 保持点间的初始距离&#xff1b; Stiffness 越高的stiffness&#xff0c;就需要越多的迭代来收敛&#xff0c;如constraint iterations或substeps(子步会更好)…

Codeforces Round 909 (Div. 3)(A~G)(启发式合并)

1899A - Game with Integers 题意&#xff1a;给定一个数 , 两个人玩游戏&#xff0c;每人能够执行 操作&#xff0c;若操作完是3的倍数则获胜&#xff0c;问先手的人能否获胜&#xff08;若无限循环则先手的人输&#xff09;。 思路&#xff1a;假如一个数模3余1或者2&#…

Java编程中,异步操作流程中,最终一致性以及重试补偿的设计与实现

一、背景 微服务设计中&#xff0c;跨服务的调用&#xff0c;由于网络或程序故障等各种原因&#xff0c;经常会出现调用失败而需要重试。另外&#xff0c;在异步操作中&#xff0c;我们提供接口让外部服务回调。回调过程中&#xff0c;也可能出现故障。 这就要求我们主动向外…

金融业务系统: Service Mesh用于安全微服务集成

随着云计算的不断演进&#xff0c;微服务架构变得日益复杂。为了有效地管理这种复杂性&#xff0c;人们开始采用服务网格。在本文中&#xff0c;我们将解释什么是Service Mesh&#xff0c;为什么它对现代云架构至关重要&#xff0c;以及它是如何解决开发人员今天面临的一些最紧…

基于SSM的智能仓储系统研究与设计

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…