详解 ClickHouse 的分片集群

news2024/11/24 13:08:50

一、简介

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

ClickHouse 进行分片集群的目的是解决数据的横向扩容,通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上,再通过 Distributed 表引擎把数据拼接起来一同使用。

二、集群规划

3 分片 2 副本共 6 个节点,s 表示分片数,r 表示副本数

hadoop1hadoop2hadoop3hadoop4hadoop5hadoop6
s1r1s1r2s2r1s2r2s3r1s3r2

1. 写入流程

实际生产中会设置 internal_replication=true,开启副本内部同步

在这里插入图片描述

2. 读取流程

在这里插入图片描述

  • 优先选择 error_count 值小的副本进行读取
  • 当同一分片的 error_count 值相同时选择方式有随机、顺序、优先第一顺位和主机名称近似等四种

3. 集群配置

su root
cd /etc/clickhouse-server/config.d

vim metrika.xml

#添加配置
<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>

#也可以直接在 config.xml 的<remote_servers>中指定

三、三节点版本集群配置操作

生产上 ClickHouse 建议独立部署在服务器上,建议资源:100G内存,CPU为32线程

1. 分片及副本规划

hadoop102hadoop103hadoop104
s1r1s1r2s2r1

2. 实操步骤

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

    su root
    cd /etc/clickhouse-server/config.d 
    vim metrika-shard.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>
    
    chown clickhouse:clickhouse metrika-shard.xml
    
    #也可以直接在 config.xml 的<remote_servers>中指定
    
  • 在 hadoop102 上修改 /etc/clickhouse-server/config.xml

    cd /etc/clickhouse-server
    
    vim config.xml
    
    #添加外部文件路径
    <zookeeper incl="zookeeper-servers" optional="true" />
    <include_from>/etc/clickhouse-server/config.d/metrika-shard.xml</include_from>
    
  • 分发配置到 hadoop103 和 hadoop104

    /etc/clickhouse-server/config.d/metrika-shard.xml
    /etc/clickhouse-server/config.xml
    
  • 分别修改 hadoop103 和 hadoop104 中 metrika-shard.xml<macros> 的配置

    #hadoop103
    sudo vim /etc/clickhouse-server/config.d/metrika-shard.xml
    
    <macros>
        <shard>01</shard> <!--不同机器放的分片数不一样-->
        <replica>rep_1_2</replica> <!--不同机器放的副本数不一样-->
    </macros>
    
    #hadoop104
    sudo vim /etc/clickhouse-server/config.d/metrika-shard.xml
    
    <macros>
        <shard>02</shard> <!--不同机器放的分片数不一样-->
        <replica>rep_2_1</replica> <!--不同机器放的副本数不一样-->
    </macros>
    
  • 分别在三台节点上启动 clickhouse 服务

    sudo clickhouse start
    
  • 在 hadoop102 上创建一张本地表

    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 的集群名字要和配置文件中自定义的集群名一致
    --分片和副本名称从配置文件的宏定义中获取
    --hadoop103 和 hadoop104 上会自动同步创建这张表
    
  • 在 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, default, st_order_mt, hiveHash(sku_id));
    
    --on cluster 的集群名字要和配置文件中自定义的集群名一致
    --hadoop103 和 hadoop104 上会自动同步创建这张表
    --表引擎为 Distributed,其中的参数分别为:集群名称,数据库名,本地表名,分片键
    --分片键必须是整型数字,所以用 hiveHash 函数转换,也可以 rand()
    
  • 向 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');
    
  • 分别在 hadoop102、hadoop103 和 hadoop104 上查询本地表和分布式表的数据进行对比

    --hadoop102
    select * from st_order_mt;
    select * from st_order_mt_all2;
    
    --hadoop103
    select * from st_order_mt;
    select * from st_order_mt_all2;
    
    --hadoop104
    select * from st_order_mt;
    select * from st_order_mt_all2;
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优雅谈大模型13:LangChain Vs. LlamaIndex

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

算法训练营day20--235. 二叉搜索树的最近公共祖先+701.二叉搜索树中的插入操作 +450.删除二叉搜索树中的节点

一、235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/ 文章讲解&#xff1a;https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91…

小阿轩yx-用户管理与高级SQL语句

小阿轩yx-用户管理与高级SQL语句 MySQL 进阶查询 运维工作中可以提供不小的帮助&#xff0c;运维身兼数职&#xff0c;可能会有不少数据库的相关工作 常用查询介绍 对查询的结果集进行处理 按关键字排序 使用 SELECT 语句可以将需要的数据从 MySQL 数据库中查询出来 对结…

调幅信号AM的原理与matlab实现

平台&#xff1a;matlab r2021b 本文知识内容摘自《软件无线电原理和应用》 调幅就是使载波的振幅随调制信号的变化规律而变化。用音频信号进行调幅时&#xff0c;其数学表达式可以写为: 式中&#xff0c;为调制音频信号&#xff0c;为调制指数&#xff0c;它的范围在(0&…

攻克PS之路——Day1(A1-A8)

#暑假到了&#xff0c;作为可能是最后一个快乐的暑假&#xff0c;我打算学点技能来傍身&#xff0c;首先&#xff0c;开始PS之旅 这个帖子作为我跟着B站up主学习PS的记录吧&#xff0c;希望我可以坚持下去&#xff01; 学习的链接在这里&#xff1a;A02-PS软件安装&#xff0…

Linux显示服务器Wayland切换到X11

1、临时切换 &#xff1a; 注销当前用户账户&#xff0c;返回到登录屏幕。 在登录屏幕上&#xff0c;选择您要登录的用户账户。 在输入密码之前&#xff0c;在登录屏幕的右下角可能有一个齿轮图标&#xff0c;点击它以展开更多选项。 在选项中选择“Ubuntu on Xorg”或“Ubu…

Matlab|风光及负荷多场景随机生成与缩减

目录 1 主要内容 计算模型 场景生成与聚类方法应用 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序方法复现了《融合多场景分析的交直流混合微电网多时间尺度随机优化调度策略》3.1节基于多场景技术的随机性建模部分&#xff0c;该部分是随机优化调度的重要组成部分…

web自动化(一)selenium安装环境搭建、DrissionPage安装

selenium 简介 selenium是企业广泛应用的web自动化框架 selenium 三大组件 selenium IDE 浏览器插件 实现脚本录制 webDriver 实现对浏览器进行各种操作 Grid 分布式执行 用例同时在多个浏览器执行&#xff0c;提高测试效率 问题&#xff1a;环境搭建复杂&#xff0c;浏览器版…

2-16 基于matlab的动载荷简支梁模态分析程序

基于matlab的动载荷简支梁模态分析程序&#xff0c;可调节简支梁参数&#xff0c;包括截面宽、截面高、梁长度、截面惯性矩、弹性模量、密度。输出前四阶固有频率&#xff0c;任意时刻、位置的响应结果。程序已调通&#xff0c;可直接运行。 2-16 matlab 动载荷简支梁模态分析 …

基于SpringBoot和PostGIS的某国基地可视化实战

目录 前言 一、Java后台开发设计与实现 1、模型层实现 2、控制层设计 二、WebGIS界面实现 1、列表界面的定义 2、全球基地可视化 三、成果展示 1、全球部署情况 2、亚太地区 3、欧洲基地分布 4、中东的部署 四、总结 前言 在之前的博客中&#xff0c;我们曾经对漂亮…

【安卓13 源码】RescueParty救援机制

RescueParty机制正是在这个背景下诞生的&#xff0c;当它注意到系统或系统核心组件陷入循环崩溃状态时&#xff0c;就会根据崩溃的程度执行不同的救援行动&#xff0c;以期望让设备恢复到正常使用的状态。 开机后会自动重启&#xff0c;进入Recovery界面。经查找&#xff0c;是…

软考中级--数据库系统工程师备考建议和考试注意事项

相关资料&#xff1a;《数据库系统工程师》15-21年真题、考试说明 今日软考出分&#xff0c;顺利通过。 备注&#xff1a;本人是计算机专业学生&#xff0c;之前系统学习过408和数据库理论&#xff0c;以下仅为本人的视角&#xff0c;仅供参考。 1. 备考规划 1.1 备考资料 《…

Javaweb配置tomcat

Tomcat 9版本链接 链接&#xff1a;https://pan.baidu.com/s/1u-eDur5KlqlXM_IM50Ahtg?pwd1njm 提取码&#xff1a;1njm 1、打开idea&#xff0c;创建maven项目 2023版IDEA 2、 目录结构 ps: 如果结果不完整,选中main右键 新建对应的文件夹 3、 web项目设置Tomcat(部署项目…

SelfReg-UNet:解决UNet语义损失,增强特征一致性与减少冗余的优化模型

SelfReg-UNet&#xff1a;解决UNet语义损失&#xff0c;增强特征一致性与减少冗余的优化模型 提出背景拆解类比&#xff1a;整理书架语义一致性正则化内部特征蒸馏为什么 UNet 会有语义损失&#xff1f; 提出背景 论文&#xff1a;https://arxiv.org/pdf/2406.14896 代码&…

YOLOv8关键点pose训练自己的数据集

这里写自定义目录标题 YOLOv8关键点pose训练自己的数据集一、项目代码下载二、制作自己的关键点pose数据集2.1 标注(非常重要)2.1.1 标注软件2.1.2 标注注意事项a.多类别检测框b.单类别检测框2.2 格式转换(非常重要)2.3 数据集划分三、YOLOv8-pose训练关键点数据集3.1 训练…

七天速通javaSE:第三天 程序控制结构:练习题

文章目录 前言一、基础1.计算从0~100之间奇数之和和偶数之和2. 用for循环输出0~1000之间能被5整除的数&#xff0c;每行输出三个 二、进阶1. 九九乘法表2.等边三角形 前言 本文主要讲解三种基本程序控制结构的练习题&#xff0c;以期熟练掌握顺序、选择、循环三种基本结构 一、…

Go 语言学习笔记之通道 Channel

Go 语言学习笔记之通道 Channel 大家好&#xff0c;我是码农先森。 概念 Go 语言中的通道&#xff08;channel&#xff09;是用来在 Go 协程之间传递数据的一种通信机制。 通道可以避免多个协程直接共享内存&#xff0c;避免数据竞争和锁的使用&#xff0c;从而简化了并发程…

前端开发流程与技术选型

目录 一、简介 二、前端职责 三、开发步骤 四、技术选型 五、页面展示 一、简介 做一个网站时&#xff0c;能看到的一切都是前端程序员的工作&#xff0c;负责网页或者app的结构、样式、用户操作网站时的事件逻辑&#xff08;比如点击一个按钮&#xff09;。 二、前端职…

鸿蒙开发系统基础能力:【@ohos.inputMethodEngine (输入法服务)】

输入法服务 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import inputMethodEngine from ohos.inputMethodEngine;inputMethodEngine 常量值。 系统能力&#xff1a;以下各项对应…