MySQL 离线同步至 Hive 指引文档

最近更新时间:2024-07-12 10:13:42

我的收藏
本文档将手把手的指引您完成 MySQL 离线同步至 Hive 的流程操作,大体的流程如下:
一、数据源兼容情况。
二、MySQL 环境准备。
三、Hive 环境准备。
四、WeData 前置准备。
五、离线单表:MySQL 同步至 Hive 配置步骤。
六、离线节点高级参数。
七、常见问题。

一、数据源兼容情况

MySQL 数据源

如果您想使用 MySQL 进行离线数据同步操作,需要先确认 MySQL 数据源版本支持情况及支持的读取数据类型转换。

支持版本

需遵循以下版本限制:
类型
版本
Driver
MySQL
5.6,5.7,8.0.x
JDBC Driver:8.0.21
RDS MySQL
5.6,5.7, 8.0.x
PolarDB MySQL
5.6,5.7,8.0.x
Aurora MySQL
5.6,5.7,8.0.x
MariaDB
10.x
PolarDB X
2.0.1

MySQL 读取数据类型转换

MySQL 读取支持的数据类型及类型转换对应关系如下(在处理 MySQL 时,会先将 MySQL 数据源的数据类型和数据处理引擎的数据类型做映射):
Mysql 数据类型
内部类型
int, tinyint, smallint, mediumint, int, bigint
Long
float, double, decimal
Double
varchar, char, tinytext, text, mediumtext, longtext, year
String
date, datetime, timestamp, time
Date
bit, bool
Boolean
tinyblob, mediumblob, blob, longblob, varbinary
Bytes

Hive 数据源

如果您想使用 Hive 进行离线数据同步操作,需要先确认 Hive 数据源版本支持情况及支持的写入数据类型转换。

支持版本

需遵循以下版本限制:
数据源
支持版本
Hive
2.1.1、2.3.2、2.3.5、2.3.8、2.3.9、3.1.1、3.1.2、3.1.3

Hive 写入数据类型转换

Hive 写入支持的数据类型及类型转换对应关系如下(在处理 Hive 的时候,会将 Hive 数据源的数据类型和数据处理引擎的数据类型做映射):
内部类型
Hive 数据类型
Long
TINYINT,SMALLINT,INT,BIGINT
Double
FLOAT,DOUBLE
String
String,CHAR,VARCHAR,STRUCT,MAP,ARRAY,UNION,BINARY
Boolean
BOOLEAN
Date
Date,TIMESTAMP

二、MySQL 环境准备

确认 MySQL 版本

数据集成对 MySQL 版本有要求,查看当前待同步的 MySQL 是否符合版本要求。您可以在 MySQL 数据库通过如下语句查看当前 MySQL 数据库版本。
select version();

设置 MySQL 服务器权限

您可以定义一个具有适当权限的 MySQL 用户。
1. 创建 MySQL 用户(可选):
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
2. 向用户授予所需的权限:
在离线同步的情况下,该账号必须拥有数据库的 SELECT 权限。执行命令可以参考下面:
mysql> GRANT SELECT ON *.* TO 'user' IDENTIFIED BY 'password';
3. 刷新用户的权限:
mysql>FLUSH PRIVILEGES;

添加腾讯云 MySQL 数据库安全组

安全组是一种有状态的包含过滤功能的虚拟防火墙,用于设置单台或多台云数据库的网络访问控制,是腾讯云提供的重要的网络安全隔离手段。如果您使用的腾讯云 MySQL 数据库高于基础版,您需要将下列访问 IP 加到目标数据库的安全组中。
如果不配置安全组,在您进行 MySQL 数据源配置时可能会出现连通性测试不通过的情况。具体操作参见 管理云数据库安全组

118.89.220.0/24, 139.199.116.0/24, 140.143.68.0/24, 152.136.131.0/24, 81.70.150.0/24, 81.70.161.0/24, 81.70.195.0/24, 81.70.198.0/24, 82.156.22.0/24, 82.156.221.0/24, 82.156.23.0/24, 82.156.24.0/24, 82.156.27.0/24, 82.156.82.0/24, 82.156.84.0/24, 82.157.119.0/24

三、Hive 环境准备

如果您在配置存算引擎时,配置了 EMR 作为计算引擎会为您分配一个系统的 Hive 数据源,如果您想自定义 Hive 数据源需要提前准备如下相关文件,用于在 WeData 上进行数据源配置:
core-site.xml、hdfs-site.xml:在 EMR 机器的 /usr/local/service/hadoop/etc/hadoop 目录下。
hive-site.xml:在 /usr/local/service/hive/conf/ 下。

四、WeData 前置准备

在正式配置同步任务之前,需要创建一个项目。如下基于一个全新的环境讲解相关步骤,如果您已经创建了项目成员或完成了项目创建可以跳过。

项目创建

如果您还没有在数据开发治理平台 WeData 创建过项目空间,在进行数据同步任务之前需完成项目创建。
主账号人员进入 CAM 控制台添加子账号,可以参考 准备 CAM 子账号,创建后,该成员便可以使用设置的子账号登录 WeData 大数据平台。
创建项目空间,需要进入 WeData 首页,单击项目列表 > 创建项目。 如果只是做数据集成,此处可以选择仅创建项目,输入项目标识和名称即可。




添加成员

创建完的项目只有项目所有者和主账号有权限进入。其他子账号若想进入需要由项目所有者或主账号在项目管理模块添加成员。详情请查看 项目管理
1. 单击项目管理 > 成员与角色管理,进入成员与角色管理界面,单击添加按钮。



2. 在添加成员界面,为新创建的成员设置所需角色,设置完成后,该成员便可以进入项目了。




资源组准备

确认资源组是否配置

在正式进行数据集成任务之前,请确认您所在的项目是否已配备集成资源
如果提示未配置集成资源,则无法正常运行数据集成任务。
当您创建完新项目,在执行资源组这一列会显示集成资源未配置,只需要前往 WeData 首页执行资源组 > 集成资源组为新项目关联资源即可。



进入集成资源组界面,点击对应资源组后的关联项目




集成资源组购买

如果发现目前没有集成资源组,需要前往购买。集成资源组是在运行数据集成任务时专享使用到的计算资源,本资源主要以资源组形式展现。在配置同步任务之前需要确认是否购买了数据集成资源组。详情请参见 配置集成资源组

网络连通性确认

当配置完成集成资源组,需要保证数据源网络(包括读端、写端)与数据集成资源组之间网络互通,且资源不可因为白名单限制等原因被拒绝访问,否则无法完成数据传输同步。数据集成资源组内包含的机器资源默认需处于同一 VPC 网络环境下:


若数据源开通公网:需要购买并创建 NAT 网关,允许集成资源通过网关连通数据源所在 VPC,详细操作请参见 资源组配置公网
若数据源处于 VPC 内
若与集成资源位于同一 VPC:可直接使用。
若与集成资源位于不同 VPC:需购买 对等连接 打通集成与数据源所在 VPC。
若数据源位于 IDC 或其他经典网络环境下:需购买 VPN专线网关 打通集成与数据源所在 VPC。
说明:
关于集成资源组配置与管理相关文档可查看 集成资源配置与管理

数据源配置

MySQL 数据源配置

进入配置数据源界面,MySQL 数据源支持云实例和连接串两种连接方式。
单击项目管理 > 数据源管理 > 新建数据源 > 选择 MySQL 数据源
通过云实例创建数据源。



参数
说明
连接类型
选择云实例或连接串的数据源连接形式
所属项目
当前数据源创建时的归属项目
数据源名称
新建的数据源的名称,由用户自定义且不可为空。命名以字母开头,可包含字母、数字、下划线。长度在20字符以内
显示名
数据源在产品中使用时的显示名称,不填默认显示数据源名称
描述
选填,对本数据源的描述
数据源权限
项目共享表示当前数据源项目所有成员均可使用 ,仅个人和管理员表示该数据源仅创建人和项目管理员可用
获取实例
选择账户下云数据库实例所在的地域、实例名称及 ID 信息
数据库名
需要连接的数据库名称
用户名
连接数据库的用户名称
密码
连接数据库的密码
数据连通性(旧)
测试是否能够连通所配置的数据库
说明:
若连通性测试不通过,数据源仍可保存。连通性测试未通过而保存但数据源不可使用。
如果连通性测试不通过,可能是因为 WeData 被数据库所在网络防火墙禁止,需要添加腾讯云 MySQL 数据库安全组,可以参考章节二 添加腾讯云 MySQL 数据库安全组
2024年春节后新购买的WeData默认无此功能,该功能已升级为资源组连通性。
资源组连通性(新)
支持具体资源组与数据源的连通性测试。用户只需保证自身数据源和集成资源组所在VPC网络能通即可,无需做额外的网络打通。



说明:
2024年春节前购买 WeData 的用户无此功能,若需要使用,请联系腾讯侧运维人员处理。
通过连接串创建数据源。



参数
说明
数据源名称
新建的数据源的名称,由用户自定义且不可为空。命名以字母开头,可包含字母、数字、下划线。长度在20字符以内。
描述
选填,对本数据源的描述。
数据源权限
项目共享表示当前数据源项目所有成员均可使用 ,仅个人和管理员表示该数据源仅创建人和项目管理员可用。
部署方式
支持 CDB、自建实例、公网实例三种部署方式。
区域与网络
数据源所在地域与 VPCid。
JDBC URL
用于连接 MySQL 数据库的连接串信息。URL支持IP和域名形式。
数据库名称
需要连接的数据库名称。
用户名
连接数据库的用户名称。
密码
连接数据库的密码。
数据连通性(旧)
测试是否能够连通所配置的数据库。
说明:
若连通性测试不通过,数据源仍可保存。连通性测试未通过而保存但数据源不可使用。
如果连通性测试不通过,可能是因为 WeData 被数据库所在网络防火墙禁止,需要添加腾讯云 MySQL 数据库安全组,可以参考章节二 添加腾讯云 MySQL 数据库安全组
2024年春节后新购买的 WeData 默认无此功能,该功能已升级为资源组连通性。
资源组连通性(新)
支持具体资源组与数据源的连通性测试。用户只需保证自身数据源和集成资源组所在 VPC 网络能通即可,无需做额外的网络打通。



说明:
2024年春节前购买 WeData 的用户无此功能,若需要使用,请联系腾讯侧运维人员处理。

Hive 数据源配置

Hive 数据源分系统源和自定义源。系统源是绑定 EMR 引擎后自动生成的数据源,用户可直接用,但不能删除和编辑连接信息,同一个 EMR 集群只会生成一个 Hive 系统源;自定义源类似上面的MySQL,由用户自己注册,可按需注册多个 Hive 自定义源。
Hive 系统源
当创建完新的项目,该项目的计算引擎类型是未关联的,可以前往存算引擎配置页面为该项目进行配置存算引擎。可以按照下图的指示去配置存算引擎。具体配置的详情可以参考 存算引擎配置






Hive 自定义源
单击项目管理 > 数据源管理 > 新建数据源 > 选择 Hive 数据源
通过连接串创建数据源。



参数
说明
数据源名称
新建的数据源的名称,由用户自定义且不可为空。命名以字母开头,可包含字母、数字、下划线。长度在20字符以内。不可修改
描述
选填,对本数据源的描述。
数据源权限
项目共享表示当前数据源项目所有成员均可使用 ,仅个人和管理员表示该数据源仅创建人和项目管理员可用。
部署方式
可以选择自建实例或者公网实例的部署方式
Hive 版本
所使用的 Hive 软件的特定版本号
区域和网络
选择区域和网络
Hive Server 2链接地址
是 Hive Server 2的数据库连接(JDBC)URL,用于指定客户端如何连接到 Hive 服务。格式通常包括协议 jdbc:hive2://,后跟主机地址 host,端口号 port,以及默认连接的数据库名 database。
用户名
连接数据库的用户名称。
密码
连接数据库的密码。
zookeeper 连接
指示是否通过 Zookeeper 进行连接。启用时,可以使用 Zookeeper 来管理分布式环境中的 Hive Server 2实例
zookeeper 连接地址
填写样例:jdbc:hive2://zk01:2181,zk02:2181,zk03:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
Hive 元数据地址
Hive 元数据存储的网络地址,通常是指向 Hive Metastore 服务的地址。
Hive MetaDB
指示是否启用对 Hive 元数据数据库的连接。元数据数据库存储了 Hive 中所有表和列的信息。
Hive MetaDB IP 及 端口
启用 Hive MetaDB 后,需要配置 IP 和端口,IP 和端口是用于指定 Hive MetaDB 服务器的位置和访问端口
数据库名称
启用 Hive MetaDB 后,需要配置您在 Hive MetaDB 中创建的,用于存储 Hive 元数据的数据库的名称
用户名
连接到 Hive MetaDB 的数据库账户名
密码
密码是与上述用户名关联的账户密码。在配置 Hive 时,您需要提供正确的密码以验证身份并授权对 MetaDB 的访问。
core-site.xml 文件
Hadoop 的核心配置文件,包含系统的基础设置,如安全设置和 Hadoop 运行时的 I/O 设置。若该数据源作为写入节点,该参数必填!
hdfs-site.xml 文件
Hadoop 分布式文件系统(HDFS)的配置文件,包含了 HDFS 的具体配置信息,如副本策略、权限设置等。若该数据源作为写入节点,该参数必填!
hive-site.xml 文件
Hive 的配置文件,包含了 Hive 运行时的配置信息,如 Metastore 的连接信息、存储路径等。若该数据源作为写入节点,该参数必填!
认证方式
指定连接 Hive 时使用的认证方式。可以选择“无”表示不使用认证,或者选择“Kerberos”表示使用 Kerberos 认证协议进行安全认证
keytab 文件
当启用 Kerberos 认证时,需配置 keytab 文件,keytab 文件包含了用于 Kerberos 身份验证的密钥表。
conf 文件
当启用 Kerberos 认证时,需配置 conf 文件。conf 文件是 Hive 的配置文件,其中包含了 Hive 运行所需的各种配置参数、Kerberos 相关的配置信息
principal
当启用 Kerberos 认证时,还需要指定 Hive 服务的 principal,以便 Kerberos 能够验证 Hive 服务的身份。
数据连通性(旧)
测试是否能够连通所配置的数据库。
说明:
若连通性测试不通过,数据源仍可保存。连通性测试未通过而保存但数据源不可使用。
2024年春节后新购买的 WeData 默认无此功能,该功能已升级为资源组连通性。
资源组连通性(新)
支持具体资源组与数据源的连通性测试。用户只需保证自身数据源和集成资源组所在VPC网络能通即可,无需做额外的网络打通。



说明:
2024年春节前购买 WeData 的用户无此功能,若需要使用,请联系腾讯侧运维人员处理。

五、离线单表:MySQL 同步至 Hive 配置步骤

登录 WeData 控制台 后,单击数据集成 > 离线同步。然后新建一个离线同步任务,可以选择表单模式、画布模式、脚本模式。
表单模式:仅提供读取、写入节点,适用于单表至单表固定字段同步。适用于 ODS 层无需数据清洗环节的数据同步。
画布模式:提供读取、写入、转换三类节点。适用于包含清洗环节链路。
脚本模式:支持初始化的脚本模式配置页面,支持用户选择不同的数据来源、数据目标,展示对应的脚本模板:
用户需要先选择数据来源与数据目标,未选择的状态下不允许编辑。
选择后,展示对应的脚本模块。
在脚本中,用户可以手动编写数据源、连接信息等参数。
支持在脚本中写 sql 语句,将 querysql 写到 connection 中。
本示例使用表单模式讲解配置步骤。




步骤一:MySQL 读取节点配置

以表单模式为例,阐述 MySQL 读取节点配置详情。



参数
说明
数据源
可用的 MySQL 数据源。
支持选择、或者手动输入需读取的库名称
默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。
当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。
支持选择、或者手动输入需读取的表名称
分表情况下,可在 mysql 源端支持选择或输入多个表名称,多个表需保证结构一致。
分表情况下,支持配置表序号区间。例如 'table_[0-99]' 表示读取 'table_0'、'table_1'、'table_2' 直到 'table_99' ; 如果您的表数字后缀的长度一致,例如 'table_000'、'table_001'、'table_002' 直到 'table_999',您可以配置为 '"table": ["table_00[0-9]", "table_0[10-99]", "table_[100-999]"]' 。
当数据源网络不联通导致无法直接拉取表信息时,可手动输入表名称。在数据集成网络连通的情况下,仍可进行数据同步。
添加分库分表
适用于分库场景,单击后可配置多个数据源、库及表信息。分库分表场景下需保证所有表结构一致,任务配置将默认展示并使用第一个表结构进行数据获取。
切割键
指定用于数据分片的字段,指定后将启动并发任务进行数据同步,提升数据同步效率。您可以将源数据表中某一列作为切分键,建议使用主键或有索引的列作为切分键,仅支持类型为整型的字段。
筛选条件(选填)
在实际业务场景中,往往会选择当天的数据进行同步,将 where 条件指定为 gmt_create>$bizdate。where 条件可以有效地进行业务增量同步。
如果不填写 where 语句,包括不提供 where 的 key 或 value,数据同步均视作同步全量数据。
不可以将 where 条件指定为 limit 10,这不符合 MySQL WHERE 子句约束。
高级设置(选填)
可根据业务需求配置参数。可以参考本文章节六 离线节点高级参数

步骤二:Hive 写入节点配置




参数
说明
数据源
需要写入的 Hive 数据源。
支持选择、或者手动输入需写入的库名称
默认将数据源绑定的数据库作为默认库,其他数据库需手动输入库名称。
当数据源网络不联通导致无法直接拉取库信息时,可手动输入数据库名称。在数据集成网络连通的情况下,仍可进行数据同步。
支持选择、或者手动输入需写入的表名称
当数据源网络不联通导致无法直接拉取表信息时,可手动输入表名称。在数据集成网络连通的情况下,仍可进行数据同步。
是否清空表
在写入该 Hive 数据表前可以手动选择是否清空该数据表。
写入模式
Hive 写入支持三种模式:
Append:保留原始数据, 新行追加写入
nonConflict:数据冲突时报错
Overwrite:删除原有数据重新写入
writeMode 是高危参数,请您注意数据的写出目录和写入模式,避免误删数据。加载数据行为需要配合 hiveConfig 使用,请注意您的配置。
批量提交大小
一次性批量提交的记录数大小,该值可以极大减少数据同步系统与Hive 的网络交互次数,并提升整体吞吐量。如果该值设置过大,会导致数据同步运行进程 OOM 异常。
前置 SQL(选填)
执行同步任务之前执行的 SQL 语句,根据数据源类型对应的正确 SQL 语法填写 SQL,例如,执行前清空表中的旧数据(truncate table tablename)。
后置 SQL(选填)
执行同步任务之后执行的 SQL 语句,根据数据源类型对应的正确 SQL 语法填写 SQL,例如,加上某一个时间戳 alter table tablename add colname timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
高级设置
高级设置可以参考本文章的章节六 离线节点高级参数

步骤三:配置字段映射

由于源数据库和目标数据库的表结构可能不完全相同,例如字段名称、数据类型或者字段顺序可能有所差异。字段映射可以将源数据库的字段转换为目标数据库相应的字段,确保数据能够正确地同步到目标数据库。
字段映射关系旨在通过连线的方式指定目标字段内容的来源,支持同名映射、同行映射、以及手动连线三种方式配置来源与目标节点间关系。




步骤四:任务测试运行与提交

离线同步任务在配置完成后可进行在线测试运行或提交到生产调度环境中,目前可在任务配置页面支持保存、提交、测试运行、调试停止、锁定/解锁以及前往运维操作。



序号
参数
说明
1
保存
保存当前任务配置信息,包括数据节点配置、节点连线、任务属性和任务调度配置。
2
提交
将当前任务提交至生产环境,提交后任务将按调度属性周期运行,同时提交任务将在任务运维 > 离线运维生成任务及实例记录。
说明:
提交前任务将默认保存最新配置。
提交前任务将进行必要性检测,包括任务节点配置、任务连线、资源组等。若必要性检测不通过,任务将提交失败并提示。
3
测试运行
调试运行当前任务。
4
调试停止
终止当前正在测试运行中的任务。
5
锁定/解锁
默认创建者为首个持锁者,仅允许持锁者编辑任务配置及运行任务。若锁定者5分钟内没有编辑操作,其他人可单击图标抢锁,抢锁成功可进行编辑操作。
6
前往运维
根据当前任务名称快捷跳转至任务运维页面。
7
画布转换
将当前编辑模式转换成画布模式
8
脚本转换
将当前编辑模式转换成脚本模式



参数
说明
检测存在异常
支持跳过异常直接提交,或者终止提交。
检测仅存在警告及以下
可直接提交。
提交结果



任务提交中:
展示提交进度百分比。
提示用户勿刷新/关闭页面,文案:当前任务已提交成功,可前往运维进行任务状态及数据管理。
任务提交结果-成功:
展示任务提交成功结果。
提示成功及后续跳转:文案 “提交成功,10秒后将跳转至当前任务运维详情页面” “当前任务已提交成功,可前往运维进行任务状态及数据管理”。
展示任务提交失败原因:
失败原因返回。

步骤五:离线任务运维

任务列表页面以列表形式默认展示当前账号下所有提交到调度系统中的周期运行任务。



参数
说明
任务名称
当前记录归属对任务名称
责任人
当前任务创建时配置的责任人名称
调度周期
当前任务配置的周期调度频率
调度计划
当前任务详细调度计划
运行状态
当前任务的调度运行状态
调度中:任务已提交调度,处于正常调度中
已暂停:暂时中断当前任务调度,后续可重启
已停止:当前任务调度被终止
停止中:已对当前进行停止操作,状态扭转中
最近一次提交时间
任务最近一次提交至调度系统的时间
操作
运行监控
包括任务指标统计、监控规则配置等说明:指标统计详见 离线同步指标统计,监控规则配置详见 告警订阅
查看实例
单击跳转至该任务的任务实例信息列表
补数据
对该任务进行批量补数据,仅对“调度中”的任务有效
启动
启动节点的调度任务,仅对“已暂停”和“已停止”的有效
暂停
暂停节点的调度任务,仅对“调度中”的有效暂停后任务将不会再生成新的实例,已生成实例将继续运行
删除
将该任务及任务下的所有实例一起删除,仅对“已停止”的任务有效
停止
对该节点任务所有“等待运行”和“运行中”的实例进行终止,并不再产生新的实例
告警设置
设置任务的告警信息,支持批量操作
修改责任人
修改任务的责任人,支持批量操作

六、离线节点高级参数

在配置读写节点时,可以配置高级设置,配置内容和使用场景如下所示:
离线类型
读/写
配置内容
适用场景
描述
mysql
splitFactor=5
单表
控制数据同步任务被分割的粒度。在数据同步过程中,如果同步的数据量很大,可能会导致单个任务处理起来效率低下或者占用过多资源。通过设置splitFactor,可以将一个大的数据同步任务分割成多个小任务来并行处理,从而提高同步效率和性能
hive
compress=none/snappy/lz4/bzip2/gzip/deflate
单表
默认为 none。只对 textfile 格式有效,对 orc/parquet 无效(orc/parquet 需要在建表语句指定压缩)
format=orc/parquet
单表
hdfs 临时文件的格式,默认为 orc,跟最终 hive 表格式无关
配置读写节点高级参数时,可以参考下图引导:




七、常见问题

1. Hive On CHDFS表写入报错:Permission denied: No access rules matched




错误原因
数据集成资源组是全托管资源组,资源组的出口网段非客户的 VPC 内网网段,需要对数据集成资源组放开安全组。
请在 CHDFS 挂载点,对集成资源组的 CHDFS 权限 id 进行授权。



解决方法:
前往 API Explorer 界面填入参数,其中 MountPointId 为客户 CHDFS 挂载点,AccessGroupIds.N 为 数据集成资源组的 CHDFS 权限 id。
注意:
不同区域的权限 id 不同。