13TB的StarRocks大数据库迁移过程

    公司有一套StarRocks的大数据库在大股东的腾讯云环境中,通过腾讯云的对等连接打通,通过dolphinscheduler调度datax离线抽取数据和SQL计算汇总,还有在大股东的特有的Flink集群环境,该环境开发了flink开发程序包部署,实时同步数据。

     公司业务帆软报表平台有40张左右的报表连接的Starrocks大数据库。Starrocks大数据库整个库大小超过13TB+

     因各种原因,大股东的腾讯云环境不再让使用,打通的对等连接也会断开,需要把Starrocks及相关的服务等迁移回来:

      1,Dolphinscheduler分布式调度:调度Datax抽取脚本和SQL计算汇总脚本

      2,重新部署StarRocks数据库集群

      3,实时同步几十张实时同步的表

      4,同步现有StarRocks的历史数据到新的集群中

      5,实时Flink聚合的表

   因涉及的报表和东西多,再2023年就公司说要迁回来,但情况一说,太复杂了,就一直拖着不迁移。

   但到2024年4,5月份,公司大股东说必须要迁移,公司让尽快研究StarRocks迁移事情,这件事又落自己头上,想想头大,这么多事情,测试方案,部署环境,买机器,实时同步,历史数据处理等等,这次没办法只能向前做,从2024年5月份到现在2024年11月份,迁移工作是被动做做停停的,到现在完成差不多,抽空把过程总结写下来:

    1,Dolphinscheduler分布式调度

        1.1  为省成本,请大股东的运维远程在公司腾讯云现有机器上部署DS调度,部署的版本一致,在个别机器内存做扩容

        1.2  以前海豚的调度元数据库导出,部署到公司的MySQL,这样任务和调度就和以前一样。

        1.3  海豚调度的Datax脚本,因以前他们用了CFS服务共享磁盘用一套,这边做不了,只能在3台机器上各部署一套路径一致的datax抽取脚本

     2,部署StarRocks数据库集群

           考虑兼容问题,没有使用最新的StarRocks 3 版本,用的腾讯云EMR集群的Starrocks2.5版本,省去自建和维护的很多事情。

     3,实时同步

         1,使用Flink集群

              以前做的程序是在其特殊Flink API环境开发,拿以前的程序直接部署到Flink集群就无法使用,要么重新开发,我不擅长Flink这块,只能放弃!

         2,腾讯云---流计算Oceanus

             咨询腾讯云的技术支持,推荐Oceanus,可以实现Flink SQL实现实时同步,发现还有多表同时同步的,觉得终于可以解决这个实时同步问题了,就买了一个月的Oceanus服务,测试了多表,通过Microsoft VS Code搜索目录下的帆软报表,找出实时同步的表,然后按库多表同时同步,但是部署6个任务后,按库多表同时同步,经常报错,不稳定,后来咨询,腾讯云说多表同步不稳定的确不推荐,但我一个表一个job任务,那要多少任务,肯定不行,没办法不能使用!

         3,Java程序实现实时同步

           研发同学,说以前做个单个表的同步,没办法,只能让他通过java程序来实现同步,通过读取binlog程序写到库里,后来把这6个整理的几十个任务表提供,他写java程序同步,可以使用。

      4,StarRocks历史数据同步

         咨询大股东,他们迁移StarRocks到腾讯云的EMR,历史数据是通过StarRocks外部表来做,但公司说要节省成本折扣更多,把StarRocks买到另外一个腾讯云账号上,再打通到现在公司的腾讯云,这样就有3个腾讯云账号,又没法把新账号腾讯云和大股东腾讯云打通,结果导致2个Starrocks不通,不能通过外部迁移历史数据,没办法,这时就想到用自己做的开源pydatax来同步,但要拼接处src_table_column表,直接通过SQL就可以出来如下:  

select  TABLE_NAME,GROUP_CONCAT(replace(COLUMN_NAME,'etl_process_time','now() as etl_process_time')) cols from 
(select TABLE_NAME,COLUMN_NAME,ORDINAL_POSITION
from information_schema.`columns` 
where TABLE_SCHEMA='db'
and TABLE_NAME like 'bo_ods%' order by TABLE_NAME asc,ORDINAL_POSITION asc ) t
GROUP BY  TABLE_NAME order by TABLE_NAME asc

       以上表是离线的,实时的也是类似。获取到src_table_column信息,通过下列SQL获取写入到datax_config_wm表

SELECT TABLE_NAMe,
CONCAT("INSERT INTO datax_config_wm (type, src_table_name, json_id, des_table_name, relation,dcondition, ",
"src_table_column, des_table_column, server_type, ordernum, status, etl_type, etl_column, etl_num, last_etl_date, note, ",
"create_time) VALUES ('1','",TABLE_NAMe,"','",'9',"','",TABLE_NAMe,"',","'t','","1=1","','",GROUP_CONCAT(COLUMN_NAME),"'",'ss#stt') FROM ( select * from information_schema.`columns` where TABLE_SCHEMA='report_srdw' and TABLE_NAME in ( select TABLE_NAME from information_schema.`tables` where TABLE_SCHEMA='report_srdw' and ENGINE='StarRocks' and TABLE_NAME like 'bo_ods_%') order by TABLE_NAME asc,ORDINAL_POSITION asc ) t group by TABLE_NAME;

     注:这个'ss#stt'字符,是用来替换成下列字符:       

, '*', 0, 22.001, 1, 0, '', 14, CURRENT_DATE(), 'wm', now());

    生成完成后,copy和修改pydatax让其读取配置表datax_config_wm,离线是T+1,同步历史数据。

    已经部署的海豚调度已经每天在同步数据。历史数据就通过pydatax同步数据,遇到特别大的表,导致抽取查询超时,修改参数成6000秒:

set global query_timeout=6000;

    但改完个别表大还是超时,这时对这个表分割多次同步,直接修改datax_config_wm的加上范围就可。

    几天时间,实时和离线的322张表历史数据就同步完成,部分大表抽取信息如下,看出Datax的能达到12万行+/秒的速度,6.6亿多条同步要 91分钟。

    

   5,实时Flink聚合的表

       帆软报表用到实时聚合表,但是研发同学没有实时聚合功能,查询实时报表,分析虽然做了好多聚合表,但实际只有5张表使用,

       想想就使用StarRocks 的物化视图,替换原有聚合表,对报表透明无感知,这5张表的聚合对应修改成聚合后的物化视图。

     上线后,有3张物化视图的源实时表老是同步出错,不得不取实时表改成T+1的数据表,和产品经理沟通后,对应的报表的显示的"实时"也加上"昨天"。

    以上修改后,正式切换线上帆软报表连接成新的StarRocks 库,观察线上的客户使用情况。

   总结:

       1,该迁移前后花了好几个月时间,有点长!

       2,难到不难,大量的细心的工作需要做!

       3,数据同步工具 pydatax 又一次出色完成其高效简单的数据迁移任务。

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

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

相关文章

ARP表、MAC表、路由表的区别和各自作用

文章目录 ARP表、MAC表、路由表的区别和各自作用同一网络内:ARP表request - 请求reply - 响应 MAC地址在同一网络内,交换机如何工作? 不同网络路由表不同网络通信流程PC1到路由器路由器到PC2流程图 简短总结 ARP表、MAC表、路由表的区别和各自作用 拓扑图如下: 同一网络内:…

第七课 Unity编辑器创建的资源优化_UI篇(UGUI)

上期我们学习了简单的Scene优化,接下来我们继续编辑器创建资源的UGUI优化 UI篇(UGUI) 优化UGUI应从哪些方面入手? 可以从CPU和GPU两方面考虑,CPU方面,避免触发或减少Canvas的Rebuild和Rebatch&#xff0c…

微服务搭建----springboot接入Nacos2.x

springboot接入Nacos2.x nacos之前用的版本是1.0的,现在重新搭建一个2.0版本的,学如逆水行舟,不进则退,废话不多说,开搞 1、 nacos2.x搭建 1,首先第一步查询下项目之间的版本对照,不然后期会…

Node.js 实战: 爬取百度新闻并序列化 - 完整教程

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候,大家会用到python ,因为实现起来很方便。但是其实Node.js 用来爬取网络内容,也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫,可…

Flink四大基石之State(状态) 的使用详解

目录 一、有状态计算与无状态计算 (一)概念差异 (二)应用场景 二、有状态计算中的状态分类 (一)托管状态(Managed State)与原生状态(Raw State) 两者的…

底部导航栏新增功能按键

场景需求: 在底部导航栏添加power案件,单击息屏,长按 关机 如下实现图 借此需求,需要掌握技能: 底部导航栏如何实现新增、修改、删除底部导航栏流程对底部导航栏部分样式如何修改。 比如放不下、顺序排列、坑点如…

如何在 Firefox 中清除特定网站的浏览历史记录

以下,我将介绍如何清除特定网站的浏览历史记录。清除历史记录可以保护隐私,特别是在公共或共享设备上使用时,还能节省设备存储空间,避免浏览历史占用过多内存。 如何清除特定网站的浏览历史记录 在 Firefox 中,清除特…

SpringMVC(二)

Model 以Map方式进行存储,用于向作用域中存值。 注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key Controller //控制器类 public class IndexController {RequestMapping("/index3")public Strin…

ABE 中的隐藏属性:DIPPE(去中心化内积谓词加密)

1. 引言 相关论文有: Yan Michalevsky 和 Marc Joye 2018年论文 Decentralized policy-hiding ABE with receiver privacy,发表于23rd European Symposium on Research in Computer Security, ESORICS 2018。Amit Sahai 和 Brent Waters 2005年论文 Fu…

计算机网络——不同版本的 HTTP 协议

介绍 HTTP,即超文本传输协议(HyperText Transfer Protocol),是应用层的一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。本文将介绍 HTTP 协议各个版本。 HTTP/1.0 HTTP/1…

Linux——基础命令(2) 文件内容操作

目录 ​编辑 文件内容操作 1.Vim (1)移动光标 (2)复制 (3)剪切 (4)删除 (5)粘贴 (6)替换,撤销,查找 (7&#xff…

嵌入式硬件实战提升篇(三)商用量产电源设计方案 三路电源输入设计 电源管理 多输入供电自动管理 DCDC降压

引言:本文你能实际的了解到实战量产产品中电源架构设计的要求和过程,并且从实际实践出发搞懂电源架构系统,你也可以模仿此架构抄板到你自己的项目,并结合硬件篇之前的项目以及理论形成正真的三路电源输入设计与开发板电源架构块供…

30分钟学会正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…

如何手搓一个智能激光逗猫棒

背景 最近家里的猫胖了,所以我就想做个逗猫棒。找了一圈市场上的智能逗猫棒,运行轨迹比较单一,互动性不足。 轨迹单一,活动范围有限 而我希望后续可以结合人工智能物联网,通过摄像头来捕捉猫的位置,让小…

【C语言】递归的内存占用过程

递归 递归是函数调用自身的一种编程技术。在C语言中,递归的实现会占用内存栈(Call Stack),每次递归调用都会在栈上分配一个新的 “栈帧(Stack Frame)”,用于存储本次调用的函数局部变量、返回地…

Bert+CRF的NER实战

CRF(条件随机场-Conditional Random Field) 原始本文:我在北京吃炸酱面 标注示例(采用BIO标注方式): 我O在O北B-PLA京I-PLA吃O炸B-FOOD酱I-FOOD面I-FOOD CRF: 目的:提出一些不可能…

pycharm链接neo4j数据库(简单)

1.安装pycharm 2.安装库 pip install py2neo -i https://pypi.tuna.tsinghua.edu.cn/simple 3.代码试运行 from py2neo import Graph, Node, Relationship# 连接到Neo4j数据库,使用Bolt协议 graph Graph("bolt://localhost:7687", auth("neo…

故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab) 源码设计 %% 初始化 clear close all clc disp(此程序务必用2023b及其以上版本的MATLAB!否则会报错!) warning off %

flask的第一个应用

本文编写一个简单的实例来记录下flask的使用 文章目录 简单实例flask中的路由无参形式有参形式 参数类型不同的http方法本文小结 简单实例 flask的依赖包都安装好之后,我们就可以写一个最简单的web应用程序了,我们把这个应用程序命名为first.py: from fl…

jmeter 压测常用静默参数解释应用

简介: JMeter静默压测(即无界面压测)是一种常用的性能测试方法,用于模拟多个用户同时访问系统并测量系统的响应时间和吞吐量等关键性能指标。在JMeter静默压测中,常用的压测参数及其解释如下: 一、基本…