大数据-142 - ClickHouse 集群 副本和分片 Distributed 附带案例演示

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(正在更新···)

章节内容

上节我们完成了如下的内容:

  • 副本和分片,上节主要是副本的部分
  • Zk 的配置
  • Replicated MergeTree原理详解

在这里插入图片描述

分片部分

副本(Replica)

  • 概念:副本是指在多个节点之间复制相同的数据,确保即使某个节点发生故障,数据仍然可以从其他节点访问。副本提升了数据的高可用性和容错能力。
  • 目的:如果某个节点宕机,查询可以从其他副本节点读取数据,保证系统的高可用性。同时,副本还可以均衡负载,在高并发查询时,副本节点可以分担查询压力。
  • 实现:每个分片的副本节点存储相同的数据,ClickHouse 提供自动的副本同步机制,在节点恢复或新增副本时,数据会自动同步。
    副本节点使用 ZooKeeper 进行协调,确保数据的写入在副本之间一致,并自动管理副本间的同步操作。
  • 配置:副本通常通过 ReplicatedMergeTree 表引擎来实现,表的路径和副本 ID 由 ZooKeeper 进行管理。

Distributed 表

  • 概念:Distributed 表是一种特殊的表类型,它不直接存储数据,而是将查询转发到多个分片或副本表中。这使得用户可以对多个节点执行统一的查询。
  • 目的:通过 Distributed 表,可以将查询透明地分发到各个分片和副本上,最大化利用集群的并行处理能力。它简化了跨节点、跨分片查询的复杂性。
  • 实现:在定义 Distributed 表时,需要指定目标集群、数据库和底层存储表的名字。

查询 Distributed 表时,ClickHouse 会根据分片键(如果存在)将查询转发到各个分片执行,并将各分片的结果汇总返回。
Distributed 表可以自动处理分片和副本的负载均衡。

分片、副本与 Distributed 表的组合

  • 分片与副本的组合:通过分片,集群可以水平扩展,而通过副本,集群能够实现高可用性。当一个集群有多个分片和副本时,ClickHouse 会首先将数据分片,确保每个分片在不同的服务器上;每个分片的数据会有多个副本,副本分布在不同的节点上。
  • 查询策略:查询通常会通过 Distributed 表执行。ClickHouse 会自动选择一个副本来读取数据,如果某个副本不可用,它会自动切换到其他可用副本上。查询时,可以利用并行处理,在多个分片上同时进行查询计算,提升整体查询性能。
  • 副本一致性:当数据写入到副本时,ClickHouse 使用强一致性协议,确保每个副本在写入时数据是相同的。通过 ZooKeeper 管理副本的同步和协调,副本在恢复后可以从其他节点拉取丢失的数据。

优点与挑战

优点

  • 高可用性:通过副本机制,即使某个节点宕机,查询和数据仍然可用。
  • 可扩展性:分片机制允许系统在大规模数据场景下水平扩展。
  • 高性能:Distributed 表的并行查询处理机制大大提升了查询速度,尤其在多分片、多节点的环境下。

挑战

  • 管理复杂性:集群、分片、副本、ZooKeeper 之间的协调关系比较复杂,配置和维护需要较高的技术能力。
  • 数据延迟:虽然副本同步机制较为强大,但在某些极端情况下,副本之间可能存在数据延迟。

配置文件

我们配置集群的时候,已经配置过了。
这里我把配置文件在粘贴到这里一次:(记得端口的事情)

<yandex><remote_servers><perftest_3shards_1replicas><shard><internal_replication>true</internal_replication><replica><host>h121.wzk.icu</host><port>9000</port><user>default</user><password>clickhouse@wzk.icu</password></replica></shard><shard><internal_replication>true</internal_replication><replica><host>h122.wzk.icu</host><port>9000</port><user>default</user><password>clickhouse@wzk.icu</password></replica></shard><shard><internal_replication>true</internal_replication><replica><host>h123.wzk.icu</host><port>9000</port><user>default</user><password>clickhouse@wzk.icu</password></replica></shard></perftest_3shards_1replicas></remote_servers><zookeeper-servers><node index="1"><host>h121.wzk.icu</host><port>2181</port></node><node index="2"><host>h122.wzk.icu</host><port>2181</port></node><node index="3"><host>h123.wzk.icu</host><port>2181</port></node></zookeeper-servers><macros><shard>01</shard><replica>h121.wzk.icu</replica></macros><networks><ip>::/0</ip></networks><clickhouse_compression><case><min_part_size>10000000000</min_part_size><min_part_size_ratio>0.01</min_part_size_ratio><method>lz4</method></case></clickhouse_compression>
</yandex>

Distributed用法

Distributed表引擎

  • all 全局查询
  • local 真正的保存数据的表

Distributed

分布式引擎,本身不存储数据,但可以在多个服务器上进行分布式查询。
读是自动并行的,读取时,远程服务器表的索引(如果有的话)会被使用。
指令是:

Distributed(cluster_name, database, table [, sharding_key])

参数解析:

  • cluster_name 服务器配置文件中的集群名,在我们配置的metrika.xml中
  • database 数据库名
  • table 表名
  • sharding_key 数据分片键

案例演示

创建新表

在3台节点上的t表插入新建表
注意:是三台节点都要!!!

CREATE TABLE test_tiny_log(id UInt16,name String
) ENGINE = TinyLog;

执行结果如下图所示:
在这里插入图片描述

插入数据

在3台节点上的t表插入一些数据
注意:是三台节点都要!!!

INSERT INTO test_tiny_log VALUES (1, 'wzk');
INSERT INTO test_tiny_log VALUES (2, 'icu');SELECT*
FROMtest_tiny_log

执行结果如下图所示:
在这里插入图片描述

分布式表

CREATE TABLE dis_table(id UInt16,name String
) ENGINE = Distributed(perftest_3shards_1replicas, default, test_tiny_log, id);

执行代码如下:
在这里插入图片描述

插入数据

INSERT INTO dis_table SELECT * FROM test_tiny_log;

插入我们刚才准备的数据:
在这里插入图片描述

查询数据

select count() from dis_table;

运行结束后,对应的截图如下所示:
在这里插入图片描述
查看每台节点的数据:

SELECT COUNT() FROM test_tiny_log;

执行结果如下图:
h121节点的返回:
在这里插入图片描述
h122节点的返回:
在这里插入图片描述
h123节点的返回:
在这里插入图片描述
可以看到三台的总数量(2 + 3 + 3)等于我们的分布式表dis_table(8)的数量,每个节点大约有 1/3 的数据。

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

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

相关文章

Tcping:一款实用的端口存活检测工具

简介 tcping 是一个基于TCP协议的网络诊断工具,通过发送 TCP SYN/ACK包来检测目标主机的端口状态。 官网:tcping.exe - ping over a tcp connection 优点: (1)监听服务器端口状态:tcping 可以检测指定端口的状态,默认是80端口,也可以指定其他端口。 (2)显示ping返…

ESXI主机证书报错

VCENTER提示主机证书状态异常 没有虚拟机运行 查看状态发现即将过期&#xff08;但其实已经过期了&#xff09; 点击更新即可&#xff0c;当有虚拟机运行时&#xff0c;不能直接更新证书。

探索自闭症寄宿学校的专属教育模式

在自闭症儿童教育的探索之路上&#xff0c;寄宿学校作为一种特殊的教育形式&#xff0c;正逐渐展现出其独特的优势与价值。这些学校不仅为自闭症儿童提供了一个安全、稳定的生活环境&#xff0c;更通过专属的教育模式&#xff0c;帮助他们逐步克服障碍&#xff0c;实现潜能的最…

掌握数据中心虚拟化:关键挑战与解决方案

数据中心虚拟化是使用云软件平台将物理数据中心转变为数字数据中心的过程&#xff0c;使企业能够远程访问信息和应用程序。它包括在数据中心内创建物理基础设施的多个虚拟版本&#xff0c;通过将服务器、存储和网络等资源划分为虚拟实体来实现资源的高效利用。 虚拟化环境中的关…

关于 NLP 深度学习的核心流程

基本流程实现的先后顺序&#xff08;每一步都包含很多技术点&#xff09;&#xff1a; 选定语言模型结构 关于语言模型&#xff1a; 作用 判断那一句话相对更合理&#xff0c;相对不合理的会得到较底的分值&#xff1a; 挑选成句概率分值最高的评价指标&#xff1a;PPL&…

微服务架构中的负载均衡与服务注册中心(Nacos)

1. 负载均衡&#xff1a;解决实际业务问题 1.1 业务场景思考 想象一个电子商务平台的微服务架构。我们有一个订单服务和多个用户服务实例。当订单服务需要调用用户服务时&#xff0c;它如何选择具体调用哪一台用户服务器&#xff1f;这就是负载均衡要解决的核心问题。 1.2 常…

主流卷积神经网络CNN总结

ResNet&#xff08;2015&#xff09;残差神经网络 残差结构 ResNet50具体卷积结构图 ResNeXt&#xff08;2016&#xff09;加入了分组卷积的思想&#xff0c;将原ResNet网络中的block替换成由group分组的block&#xff0c;两者得到的feature map一致&#xff0c;只是参数量更少…

《微软飞行模拟2024》储存空间需求仅不到前作的1/5

根据微软在最新一期 Xbox Wire 中的介绍&#xff0c;将于今年11 月登陆 Xbox Series X|S 主机的《微软飞行模拟2024》将比前作占用空间小很多。 微软解释了为何新作的文件大小仅为30GB&#xff0c;约为前作的五分之一。简单来说&#xff0c;微软使用了云流媒体传输技术。公司还…

SEC重拳打击币安

美国SEC于上周四提交针对币安的拟议修订投诉&#xff0c;重点关注交易所的代币上市流程。 1.美国证券交易委员会对币安提出拟议的修订申诉。 2.SEC在驳回币安最初诉讼的动议中基本获胜&#xff0c;但在驳回动议的命令中&#xff0c;关于某些代币的若干问题仍未得到解答。 3.SEC…

木马加载器通用套路

木马加载器通用套路 加载器 木马有两种类型&#xff0c;第一种是自己写的木马&#xff0c;作为远控客户端&#xff0c;第二种是加载器 加载器就是把C2的shellcode加载到目标机器的过程。目前攻防场景下&#xff0c;主流手段是通过加载器的方式实现远控 既然是加载器&#xff…

C#开源的一个能利用Windows通知栏背单词的软件

前言 今天给大家推荐一个C#开源且免费的能利用Windows通知栏背单词的软件&#xff0c;可以让你在上班、上课等恶劣环境下安全隐蔽地背单词&#xff08;利用摸鱼时间背单词的软件&#xff09;&#xff1a;ToastFish。 操作系统要求 目前该软件只支持Windows10及以上系统&…

基于uniapp的民宿酒店预订系统(后台+小程序)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Maven Helper 插件

推荐指数&#xff1a;★★★★★ 分析依赖冲突插件 Maven Helper插件就可免去命令行困扰。通过界面解决依赖冲突。 点击此按钮&#xff0c;切换到此工具栏 可进行相应操作&#xff1a; Conflicts&#xff08;查看冲突&#xff09;All Dependencies as List&#xff08;列表形…

vue项目中——如何用echarts实现动态航线图

在Web开发中&#xff0c;数据可视化越来越受到重视。本文将带领大家了解如何在Vue项目中使用ECharts实现动态航线图&#xff0c;如下图&#xff1a;让你的数据展示更加生动有趣。 一、准备工作 1、安装ECharts 在项目根目录下&#xff0c;运行以下命令安装ECharts&#xff1a…

【CPU】CPU的物理核、逻辑核、超线程判断及L1、L2、L3缓存和缓存行说明

CPU物理核及L1、L2、L3及缓存 CPU缓存 CPU 缓存是一种用于存储临时数据以提高计算机程序性能的内存层次结构。它通常分为三个层次&#xff1a;L1&#xff08;一级&#xff09;、L2&#xff08;二级&#xff09;和L3&#xff08;三级&#xff09;缓存。缓存大小是CPU的重…

计算机毕业设计 基于Python Django的旅游景点数据分析与推荐系统 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

SpringBoot+Thymeleaf图书管理系统

一、项目介绍 > 这是一个基于SpringBootThymeleaf实现的图书管理系统。 > 包含图书管理、作者管理、分类管理、出版社管理等功能。 > 界面简洁美观&#xff0c;代码结构清晰&#xff0c;完成度比较高&#xff0c;适用于JAVA初学者作为参考项目。 二、项目演示 三…

【刷题日记】43. 字符串相乘

43. 字符串相乘 其实就是大数乘法题&#xff0c;这道题用草稿纸演练一下&#xff0c;其实很好找到方法&#xff0c;模拟大数乘法即可。需要注意的是进位和迭代值&#xff0c;还有注意向下取整和去除前导0&#xff08;容易遗漏&#xff09;。去除前导0的时候还要注意如果全是0&…

OpenAI或于9月24日发布ChatGPT高级语音模式

&#x1f989; AI新闻 &#x1f680; OpenAI或于9月24日发布ChatGPT高级语音模式 摘要&#xff1a;科技媒体报道&#xff0c;OpenAI计划在9月24日进一步推广ChatGPT的高级语音模式&#xff0c;预计将正式发布。该模式于7月向部分ChatGPT Plus用户开放&#xff0c;提供更为真实…

Java面试篇基础部分-Java语言中的锁有哪些?

Java中的锁主要是用于保障并发线程场景下的数据一致性问题。在多线程编程中为了保证数据一致性&#xff0c;通常需要在使用对象或者方法之前进行加锁操作。也就是说要保证在同一时间内只能由一个线程来对对象进行修改&#xff0c;从而保证了数据一致性&#xff0c;保证了数据安…