详解 ClickHouse 的分片集群

一、简介

分片功能依赖于 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.dvim 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-servervim 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.mzph.cn/pingmian/35038.shtml

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

相关文章

C语言基础——函数(2)

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 文章目录 前言 一、return语句 二、数组做函数参数 三、嵌套调用和链式访问 3.1 嵌套调用 3.2 链式访问 四、函数声明和定义 4.1 单个文件 4.2 多个文件 总结 前言 大家好啊&#xff0c;继我们上一…

优化系统小工具

一款利用VB6编写的系统优化小工具&#xff0c;系统优化、桌面优化、清理垃圾、查找文件等功能。 下载:https://download.csdn.net/download/ty5858/89432367

构造,析构,垃圾回收

构造函数 基本概念 在实例化对象时 会调用的用于初始化的函数 如果不写&#xff0c;默认存在一个无参构造函数 构造函数的写法 1.没有返回值 2.函数名和类名必须相同 3.没有特殊需求时&#xff0c;一般都是public的 4.构造函数可以被重载 5.this代表当前调用该函数的对…

前端JS计算精度损失的问题

例子: 0.10.2 //0.30000000000000004 1.2-1 //0.19999999999999996 1.15*100 //114.99999999999999 1.2/0.2 //5.999999999999999 方式1 // 两个浮点数求和 function num_add(num1,num2){var r1,r2,m;try{r1 num1.toString().split(.)[1].length;}catch(e){r1 0;}try{r2num…

【UE5.3】笔记1

内容浏览器&#xff1a;存放项目中所有的资源&#xff1a;关卡、蓝图类...... 关卡--Map 至少有一个关卡&#xff0c;可以有多个关卡 -漫游 视野漫游&#xff1a;鼠标右键WASD QE 鼠标滑轮控制摄像机速度 运行&#xff0c;ESC退出运行,快捷键F8不停止运行单独弹出功能 -创…

计算机视觉全系列实战教程 (十三):图像形态学操作

1.基本概述 (1)What 图像的形态学操作的本质&#xff1a;集合间的运算 几何学 (2)Why(有什么用途&#xff09; 消除噪声、边缘提取、区域填充、细化和粗化、分割独立的图像元素、求图像梯度、求极大值区域或极小值区域等。 (3)Which(有哪些常见的形态学操作) A.膨胀 使得…

Express的模块化路由

Express的模块化路由是一种组织和管理路由的有效方式&#xff0c;它使得代码更加清晰、易于维护和扩展。 1. 模块化路由的概念 模块化&#xff1a;在编程中&#xff0c;模块化是将程序拆分成多个独立但相互依赖的模块&#xff0c;每个模块都包含特定的功能和数据。Express模块…

使用了CDN,局部访问慢,如何排查

如果是局部访问慢&#xff0c;则可从如下角度查看 是否DNS设置错误导致&#xff1f; 个别用户可能存在local DNS设置错误&#xff0c;导致出现跨地域或跨运营商访问。因为CDN的权威DNS是基于用户请求的localDNS来判断所属的地区和运营商&#xff0c;从而将请求引导至对应最近…

《编译原理》阅读笔记:p19-p24

《编译原理》学习第 4 天&#xff0c;p19-p24总结&#xff0c;总计 5 页。 一、技术总结 1.grouping of phases 这里谈到分组(group)&#xff0c;那么就会有一个疑问&#xff0c;分组的依据是什么&#xff1f;即根据什么来分组。 (1) front end & back end 编译器包含…

找不到d3dcompiler_47.dll如何修复,这几种修复方法可搞定

最近&#xff0c;我在尝试运行一款游戏时遇到了一个问题&#xff0c;系统提示我丢失了d3dcompiler_47.dll文件。这让我感到非常困扰&#xff0c;因为这个问题导致我无法正常运行游戏。经过一番搜索和尝试&#xff0c;我找到了几种修复这个问题的方法&#xff0c;并成功解决了这…

【内网穿透】FRP 跨平台内网穿透 支持windows linux x86_64 arm64 端口范围映射

AI提供的资料&#xff1a; FRP&#xff08;Fast Reverse Proxy&#xff09;是一个专为内网穿透设计的高性能反向代理程序。以下是一些关于FRP的详细资料&#xff0c;帮助您更好地理解和使用这一工具&#xff1a; 核心特点&#xff1a; 内网穿透&#xff1a;能够将位于内网的…

都2024年了,现在互联网行情怎样?

都2024年了&#xff0c;互联网行情是怎样的&#xff1f; 很直白的说&#xff0c;依旧是差得很&#xff0c;怎么说&#xff1f; 我刚在掘金上看到一个掘友写的文章&#xff0c;他是四月领了大礼包&#xff0c;据他的描述如下&#xff1a; 互联网行情依旧是差得很&#xff0c;很…

搜维尔科技:「研讨会」惯性动捕技术在工效学领域应用研讨会

Movella将于7月2日&#xff08;周二&#xff09;下午2点举行主题为惯性动捕技术在工效学领域应用的研讨会。来自Movella的伙伴赋能经理Jeffrey Muller作为嘉宾出席&#xff0c;届时主讲人将为大家带来Xsens惯性动捕技术在工效学领域的应用分享。同时&#xff0c;研讨会还邀请多…

代码随想三刷贪心篇1

代码随想三刷贪心篇1 455. 分发饼干题目代码376. 摆动序列题目代码53. 最大子数组和题目代码455. 分发饼干 题目 链接 代码 class Solution {public int findContentChildren(int[] g, int[] s) {Arrays

监控https证书的到期时间

实现该功能&#xff0c;不用借助第三方库&#xff0c;用go的标准库就足够了… 以下程序可以获取这些域名的SSL证书的到期时间&#xff0c;并在证书距离现在不足7天过期时打印提示&#xff1a; package mainimport ("crypto/tls""fmt""net""…

计算机网络基础入门

计算机网络基础入门 目录&#xff1a; 简介网络分层模型数据封装与解封装IP地址与子网掩码网络协议示例代码 1. 简介 计算机网络是指将地理位置不同的多台计算机及外部设备通过通信线路连接起来&#xff0c;实现信息资源共享和信息传递的系统。计算机网络是现代信息社会的基…

运维.云技术学习.基于应用服务网格的灰度发布(上:理论基础篇)

运维专题 基于应用服务网格的灰度发布&#xff08;上&#xff1a;理论基础篇&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAdd…

Opencv学习项目6——pyzbar

在之前我们学习了解码图片中的二维码&#xff0c;这次我们开启摄像头来解码视频中二维码 开启摄像头 # 打开摄像头 cap cv2.VideoCapture(0) cap.set(3, 640) # 设置摄像头画面宽度 cap.set(4, 480) # 设置摄像头画面高度 我使用的是笔记本上的摄像头来进行的&#xff0c;…

openGauss学习笔记-304 openGauss AI特性-AI4DB数据库自治运维-ABO优化器-智能基数估计

文章目录 openGauss学习笔记-304 openGauss AI特性-AI4DB数据库自治运维-ABO优化器-智能基数估计304.1 概述304.2 前置条件304.3 使用指导304.4 最佳实践304.5 常见问题处理openGauss学习笔记-304 openGauss AI特性-AI4DB数据库自治运维-ABO优化器-智能基数估计 304.1 概述 智…