作者 | 番兄

如何借助 Apache SeaTunnel 将 MySQL 数据高效同步至 S3file?本文详述的步骤已全部通过测试验证,适用于构建基于对象存储的数据中台场景,具备部署灵活、扩展性强等优势,对有 MySQL 到 S3 数据集成需求的用户具有较高的参考价值,点赞、收藏学习吧!

第一步:创建Hive表

CREATE EXTERNAL TABLE ods_ekp.`ods_sys_notify_todo_bak` (
`fd_id` STRING,
`fd_app_name` STRING,
`fd_model_name` STRING,
`fd_model_id` STRING,
`fd_key` STRING,
`fd_parameter1` STRING,
`fd_parameter2` STRING,
`fd_create_time` TIMESTAMP,
`fd_subject` STRING,
`fd_type` INT,
`fd_link` STRING,
`fd_mobile_link` STRING,
`fd_pad_link` STRING,
`fd_bundle` STRING,
`fd_replace_text` STRING,
`fd_md5` STRING,
`fd_del_flag` STRING,
`fd_level` INT,
`doc_creator_id` STRING,
`fd_extend_content` STRING,
`fd_lang` STRING,
`fd_cate_name` STRING,
`fd_cate_id` STRING,
`fd_template_name` STRING,
`fd_template_id` STRING,
`fd_hierarchy_id` STRING
)
COMMENT 'sys_notify_todo_bak data'
PARTITIONED BY (
`dctime` STRING COMMENT '分区年月日'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
STORED AS PARQUET
LOCATION 's3a://seatunnel/doris/warehouse/ods_ekp/ods_sys_notify_todo_bak'
TBLPROPERTIES (
'parquet.compression'='ZSTD'
);

注意:

  1. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' 这个分隔符设置需要在后面SeaTunnel里面配置一样的,不然格式错误;
  2. 'parquet.compression'='ZSTD' 压缩算法也是需要在后面SeaTunnel里面配置一样的;
  3. STORED AS PARQUET parquet文件格式,也是需要在后面SeaTunnel里面配置一样的.

是用之前把注释删除

env {
job.mode = "BATCH"
parallelism = 2
} source {
Jdbc {
url = "jdbc:mysql://[服务器ip]:3306/[数据库]?serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true"
driver = "com.mysql.cj.jdbc.Driver"
user = "[账户]"
password = "[密码]",
# dctime要转换成字符串,因为hive建表的时候,这个字段是字符串;分区字段也要加到查询里面,后面SeaTunnel sink的时候会自动处理
query = "select fd_id, fd_app_name, fd_model_name, fd_model_id, fd_key, fd_parameter1, fd_parameter2, fd_create_time, fd_subject, fd_type, fd_link, fd_mobile_link, fd_pad_link, fd_bundle, fd_replace_text, fd_md5, fd_del_flag, fd_level, doc_creator_id, fd_extend_content, fd_lang, fd_cate_name, fd_cate_id, fd_template_name, fd_template_id, fd_hierarchy_id, cast(date_format(fd_create_time, '%Y-%m-%d') as char) as dctime from sys_notify_todo_bak
}
} transform {
} sink {
S3File {
bucket = "s3a://seatunnel"
fs.s3a.endpoint = "[minio服务器域名/ip]:9000"
access_key = "[账户]"
secret_key = "[密码]"
fs.s3a.aws.credentials.provider="org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider"
# 目录地址
path = "/doris/warehouse/ods_ekp/ods_sys_notify_todo_bak"
tmp_path = "/data/tmp/seatunnel"
# 必须填写的不然会出现问题,因为本人的minio没有做ssl处理,所以要这么设置
hadoop_s3_properties {
"fs.s3a.connection.ssl.enabled" = "false"
"fs.s3a.path.style.access" = "true"
}
# parquet文件格式
file_format_type = "parquet"
# 必须用\\代表\
field_delimiter = "\\001"
# parquet格式必须要加,否则会出问题
parquet_avro_write_timestamp_as_int96 = true
# 压缩算法
compress_codec = "zstd"
have_partition = true
partition_by = ["dctime"]
partition_dir_expression = "${k0}=${v0}"
is_partition_field_write_in_file = false
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
data_save_mode="APPEND_DATA"
custom_filename = true
file_name_expression = "${transactionId}_${now}"
filename_time_format = "yyyy.MM.dd"
}
}

第二步:执行SeaTunnel同步,并在Hive查询里执行下列操作

-- 刷新物理目录分析
MSCK REPAIR TABLE ods_ekp.ods_sys_notify_todo_bak; -- 查询hive表确认是否有数据
SELECT * from ods_ekp.ods_sys_notify_todo_bak limit 100;

第三步:创建Doris Hive catalog外部库

CREATE CATALOG hive PROPERTIES (
'type'='hms',
'hive.metastore.uris' = 'thrift://[hive metastore server的ip]:9083',
"s3.endpoint" = "http://[minio服务器域名/ip]:9000",
"s3.region" = "us-east-1",
"s3.access_key" = "[账户]",
"s3.secret_key" = "[密码]",
"s3.connection.ssl.enabled" = "false",
"use_path_style" = "true",
"hive.version" = '2.1.1'
); REFRESH CATALOG hive; show databases from hive; SELECT * from hive.ods_ekp.ods_sys_notify_todo_bak limit 100

说明:

  1. 因为本人用的CDH6.3.2版本,Hive是2.1.1版本,所以建立catalog的时候,需要指定"hive.version" = '2.1.1'
  2. 因为本人设置的minio没有ssl,所以配置的时候需要加上"s3.connection.ssl.enabled" = "false"
  3. Minio用的是path风格,所以需要配置"use_path_style" = "true"
  4. SeaTunnel版本: 2.3.11
  5. Doris版本:2.0.15

MySQL 数据同步至 S3file,并接入 Hive 访问:SeaTunnel 实践指南的更多相关文章

  1. Mysql数据同步Elasticsearch方案总结

    Mysql数据同步Elasticsearch方案总结 https://my.oschina.net/u/4000872/blog/2252620

  2. 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...

  3. MySQL数据同步交换

    一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路.     TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...

  4. ElasticSearch5+logstash的logstash-input-jdbc实现mysql数据同步

    在实现的路上遇到了各种坑,再次验证官方文档只能产考不能全信! ElasticSearch安装就不说了上一篇有说! 安装logstash 官方:https://www.elastic.co/guide/ ...

  5. Elasticsearch和mysql数据同步(logstash)

    1.版本介绍 Elasticsearch: https://www.elastic.co/products/elasticsearch 版本:2.4.0   Logstash: https://www ...

  6. Elasticsearch和mysql数据同步(elasticsearch-jdbc)

    1.介绍 对mysql.oracle等数据库数据进行同步到ES有三种做法:一个是通过elasticsearch提供的API进行增删改查,一个就是通过中间件进行数据全量.增量的数据同步,另一个是通过收集 ...

  7. Kettle ETL 来进行mysql 数据同步——试验环境搭建(表中无索引,无约束,无外键连接的情况)

    今天试验了如何在Kettle的图形界面(Spoon)下面来整合来mysql 数据库中位于不同数据库中的数据表中的数据. 试验用的数据表是customers: 第三方的数据集下载地址是:http://w ...

  8. Memcached与MySQL数据同步

    1.介绍 在生产环境中,我们经常使用MySQL作为应用的数据库.但是随着用户的增多数据量的增大,我们将会自然而然的选择Memcached作为缓存数据库,从而减小MySQL的压力.但是memcached ...

  9. 高可用的并行MySQL数据同步及分布式

    首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下:      1.树状结构(Master,Backup-Master ...

  10. 转载:mysql数据同步redis

    from: http://www.cnblogs.com/zhxilin/archive/2016/09/30/5923671.html 在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终 ...

随机推荐

  1. WPF 解决PasswordBox 属性Password无法绑定到后台的问题

    在 WPF 中,你可以使用密码框的 Password 属性来绑定到后台,但是由于安全性考虑,WPF 的密码框不直接支持双向绑定.然而,你仍然可以通过其他方式实现将密码框的内容绑定到后台. 一种常见的方 ...

  2. 最强AI数字人,口型、表情、动作全同步!Kairos下载介绍

    在数字化浪潮汹涌澎湃的今天,视频合成技术如同一颗璀璨的明星,照亮了内容创作的广阔天地 Kairos是一款顶级数字人制作工具,它基于先进的 AI 算法,能够快速克隆出用户的数字分身,并且精准匹配外貌.声 ...

  3. 腾讯CodeBuddy,一款自带MCP市场的编程助手

    今天我发现了一个非常实用的腾讯云编程助手--CodeBuddy.之前它的名称是腾讯云代码助手,但现在已经正式更名为CodeBuddy,并且在更名的同时,其功能也得到了显著增强.今天,我们将详细了解一下 ...

  4. codeup之Day of Week(给定日期判断周几

    题目描述 We now use the Gregorian style of dating in Russia. The leap years are years with number divisi ...

  5. WindowsPE文件格式入门09.RadAsm的bug和重定位表

    https://www.bpsend.net/thread-383-1-1.html RadAsm的bug 创建程序 1.创建程序1:C++工程: ●项目选项:控制台"hello,World ...

  6. 弹性公网IP的五大核心优势解析

    在云服务架构中,弹性公网IP(EIP)已成为现代企业网络部署的核心组件.与传统固定IP相比,它通过独特的技术机制解决了动态环境下的公网访问难题.以下五大核心优势决定了其不可替代的价值: 一.动态绑定的 ...

  7. 深入理解Nginx-模块开发与架构解析(第2版)流程梳理

    1.Nginx HTTP模块调用的简化流程 Nginx HTTP模块调用的简化流程图如上: 1.worker进程会循环调用事件模块检测网络事件 2. 当事件模块检测到客户端发起TCP请求时,即收到SY ...

  8. AI图像生成的"套娃"生意:一个月入240万美元的AI工具站

    AI图像生成的"套娃"生意:一个月入240万美元的AI工具站 今天和大家分享一个让我既佩服又警醒的案例--flux1.ai. 这个项目用最简单粗暴的方式,在AI图像生成这个红海市场 ...

  9. Libnetwork底层原理以及Docker网络实现

    1.CNM CNM (Container Network Model) 是 Docker 发布的容器网络标准,意在规范和指定容器网络发展标准,CNM 抽象了容器的网络接口 ,使得只要满足 CNM 接口 ...

  10. Socket实战与应用

    1: Socket之序列化; 让对象能够通过socket进行传输 服务端: 1 package com.lv.study.am.first; 2 3 import java.io.ObjectOutp ...