Clickhouse基于文件复制写入

news2024/12/24 8:12:31

背景

目前clickhouse社区对于数据的写入主要基于文件本地表、分布式表方式为主,但缺乏大批量快速写入场景下的数据写入方式,本文提供了一种基于clickhouse local 客户端工具分布式处理hdfs数据表文件,并将clickhouse以文件复制的方式完成写入clickhouse的方法。该方案通过spark程序实现,经测试:

(1)在相同资源下,与传统的写clickhouse基于http/tcp的方式,可提供3倍左右的性能。

(2)传统数据写过程中,clickhouse-server需要处理写入的数据,写性能主要受clickhouse集群网络、cpu、内存限制,无法通过扩展写入客户端端并发来提高写入性能,本方案将数据处理端放在了插入客户端,写入性能理论上可以线性扩展提升。

方案

传统基于http/tcp写方案

目前clickhouse 官方推介3种数据写入方式

  • official JDBC driver
  • ClickHouse-Native-JDBC
  • clickhouse4j

jdbc主要基于如下形式进行:

 基于jdbc写入的基本流程是spark集群(分布式计算引擎)读取hdfs文件,转换为dataframe后通过调用clickhouse jdbc方式,将数据写入至clickhouse服务端,clickhouse服务端完成本批次数据的生成。

clickhouse server端具体生成文件的流程为:

(1)ck集群分布式表接收到spark发送的写请求后,会更加分片键进行数据划分,对于数据属于本地分片分片的数据,直接写入本地表。对于数据属于其他分片的数据会先写入至临时目录下。

(2)对于clickhouse集群,数据的读写DDL都是依赖于zookeeper进行的,会将操作的日志写入至zk的/log下,并形成相应的task

(3)当数据写入本地表后,会将操作日志写入zk /log中,集群其他ck节点监听到/log变化后,会触发相应的ck节点拉去log操作并转换成task放入自身对应节点下的/queue中,其他节点将开始拉去该分片数据,并写入自身本地表中,同时对于分片副本原理类似。

(4)完成本次数据的拉取复制后,将移除/queue中对应的task,完成本次数据的写入。

从上面的流程中我们知道,数据的写入都是先将数据写入至分片表的本地然后复制至其他集群节点实现的,因此,clickhouse的分片表所在的机器常常负载比较大;数据的同步依赖zk进行的,zk压力也较大。

基于文件复制写方式

为了解决上述批量数据数据写入场景下的问题,社区提出了一种新的思路,即使用clickhouse local将先将数据处理成clickhouse 文件,完成后直接复制至clickhouse集群,这样大大减轻了clickhouse集群处理数据的压力,同时数据写入性能理论上可以与客户端并发写入线性增长。当前大多数公司使用clickhouse分析的数据不会在原始数据集上进行,常常是数仓加工后的明细数据,通常流程是原始数据集导入至数仓,输出加工处理,处理后的数据导出至clickhouse用于OLAP分析。本文针对这样的场景,提供了一种直接读取数仓加工生成的parquet等文件,使用spark、clickhouse-local分布式处理ck文件格式,并导入至clickhouse中,具体如下图所示:

 其中,spark集群中的spark node并不会读写hive表数据,而只是依赖spark分布程序将hive表所在hdfs上的文件分布式的方式下载至yarn node本地机器,然后调用本地机上的clickhouse local 命名,将不同文件格式的文件(parquet\orc\text\csv等)生成为clickhouse 文件块,最后通过直接通过ssh命令的方式将加工处理好的cickhouse数据复制clickhouse集群,并调用clickhouse attach part命令将数据块merge至表中,期间clickhouse表数据的所有处理动作执行端放在了spark node中进行,ck集群只负责数据的接收,大大提高了数据批量写入性能,sparknode具体处理过程如下图所示:

 

性能测试

经测试,在相同spark资源情况下,基于文件复制写入clickhouse的方式比jdbc方式写入性能有2~3倍的性能提升,且理论上文件复制方式写入可以伴随spark node增加而线性增长,在parquet格式的数据表上,不同写入方式下clickhouse完成时间对比结果如下图所示:

image.png

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

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

相关文章

直播源码异步处理技术:应对处理大量用户请求的挑战

在网络技术的快速发展背景下,直播源码平台已经成为了人们社交娱乐的重要工具,直播源码平台的用户会在平台内进行观看直播、短视频,与其他用户进行交流、交谈。由于直播源码平台用户数量的逐日增加,使得直播源码平台每天要应对、处…

vim插件

点击vim官网左边列表的Scripts链接,如下: 然后再点击Browse all链接,如下: 然后在出现的插件列表界面中还可以选择排序方式,比如按下载量降序排序,如下: 好用的插件:EasyMotion&…

算法|Day40 动态规划9

LeetCode 198- 打家劫舍 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房…

Vue学习之绑定样式

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>绑定样式</title><style>.basic{width:400px;height:100px;border:1px solid black;}.happy{border:4px solid red;background-color: rgba(255, 255, 0, 0.644…

python优雅地爬虫!

背景 我需要获得新闻&#xff0c;然后tts&#xff0c;在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路&#xff1a;获得html内容-> python的工具库解析&#xff0c;获得元素中的内容&#xff0c;完成。 好家伙&#xff0c;我知道我爬…

ROS相关技术(经验版)

重要说明&#xff1a;本文从网上资料整理而来&#xff0c;仅记录博主学习相关知识点的过程&#xff0c;侵删。 一、参考资料 ROS相关技术介绍&#xff0c;可参考之前的文章&#xff1a;ROS相关技术&#xff08;概念版&#xff09; Autolabor主站 ROS官网 ROS ROS教程 ROS编程…

小红书如何打造爆款引流吸粉?11个秘诀助你秒变达人!

在这个充满信息和内容的时代&#xff0c;小红书以其独特的社交平台特性和个性化内容吸引了众多用户。今天&#xff0c;我们就来揭秘小红书关注战略&#xff0c;了解如何在这个平台上打造独特的内容体验&#xff0c;与用户建立更亲近的连接。#小红书# 1、定位清晰&#xff0c;找…

数字化车间mes生产执行管理系统

数字化车间mes是一款基于B/S结构的生产执行管理系统&#xff0c;主要目的是为中小企业提供了高效率、低成本、通用性强的一个MES系统解决方案&#xff0c;能够实时监控当前完成进度。 功能简介&#xff1a; 生产管理 大屏展示&#xff1a;可以从大屏展示页面看到任工序…

C++ 二叉树(建立、销毁、前中后序遍历和层次遍历,寻找双亲结点等)

&#xff08;1&#xff09;结构体和类定义 struct BTreeNode {T data;BTreeNode* left, * right;BTreeNode() :data(0), left(nullptr), right(nullptr) {}BTreeNode(T val, BTreeNode<T>* leftChild nullptr, BTreeNode<T>* rightChild nullptr):data(val), le…

两个pdf合并成一个pdf怎么合并?这几个方法值得推荐

两个pdf合并成一个pdf怎么合并&#xff1f;pdf文件的合并是一个很常见的需求&#xff0c;特别是在处理工作文件或学习资料时。为了更好的帮助你了解如何将两个pdf文件合并成一个&#xff0c;下面就给大家详细介绍几种合并方法。 方法一&#xff1a;使用迅捷PDF转换器 这是一款…

【虫洞攻击检测】使用多层神经网络的移动自组织网络中的虫洞攻击检测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

一文教你学会Termux+SFTP+远程文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

设计HTML5表格

在网页设计中&#xff0c;表格主要用于显示包含行、列结构的二维数据&#xff0c;如财务表格、调查数据、日历表、时刻表、节目表等。在大多数情况下&#xff0c;这类信息都由列标题或行标题及数据构成。本章将详细介绍表格在网页设计中的应用&#xff0c;包括设计符合标准化的…

页面跳转和两个页面之间的数据传递-鸿蒙ArkTS

页面跳转和两个页面之间的数据传递-ArkTS 页面跳转和两个页面之间的数据传递-ArkTS关于router的使用**跳转页面的实现方式。**页面接受跳转传递的参数页面返回及携带参数效果代码Index页面Second页面 参考资料 页面跳转和两个页面之间的数据传递-ArkTS 本篇文章主要是对两个页面…

怎么把CAD转成JPG图片?一个方法教你如何转换

CAD是计算机辅助设计的缩写&#xff0c;通常指的是AutoCAD软件所生成的DWG文件格式。DWG是一种二进制文件格式&#xff0c;用于保存2D和3D设计数据和元数据&#xff0c;支持多种操作系统和程序使用。该格式通常用于工程、建筑、制造和其他领域的设计和绘图。 CAD文件转换成JPG图…

企业安全架构体系的现状和解决方案

一、企业安全现状 从2016年底开始随着网络安全事件的爆发和国家层面对网络安全的重视程度&#xff0c;让网络安全已经上升到国家战略层面&#xff0c;同时网络空间已经成为领土、领海、领空和太空之外的第五空间&#xff0c; 是国家主权建设的新疆域。 随着中国对外开放的进一…

echarts tooltip提示框加单位

效果&#xff1a; 1.比较简单的方法 series: [{name: "重大风险",type: "bar",data: data2,color: ExtremeRiskColor,tooltip: {valueFormatter: function (value) {return value 个;}},},{name: "较大风险",type: "bar",data: dat…

GPT垂直领域相关模型 现有的开源领域大模型

对于ToC端来说&#xff0c;广大群众的口味已经被ChatGPT给养叼了&#xff0c;市场基本上被ChatGPT吃的干干净净。虽然国内大厂在紧追不舍&#xff0c;但目前绝大多数都还在实行内测机制&#xff0c;大概率是不会广泛开放的&#xff08;毕竟&#xff0c;各大厂还是主盯ToB、ToG市…

实例038 设置窗体在屏幕中的位置

实例说明 在窗体中可以设置窗体居中显示&#xff0c;本例通过设置窗体的Left属性和Top属性可以准确设置窗体的位置。运行本例&#xff0c;效果如图1.38所示。 技术要点 设置窗体在屏幕中的位置&#xff0c;可以通过设置窗体的属性来实现。窗体的Left属性表示窗体距屏幕左侧的…

问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题

问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题 场景复现 1 new String() 2 快捷方式生成变量 final修饰的 final String s new String();步骤一&#xff1a;确保settings配置信息 settings-----》Editor------》Code Style--------》java下的这两个选项不…