文档

通过X2Doris导入数据

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍使用X2Doris同步数据至云数据库 SelectDB 版

概述

X2Doris是将各种离线数据迁移至云数据库 SelectDB 版的核心工具,该工具集自动建表数据迁移为一体,目前已支持Doris、Hive、Kudu、StarRocks、ClickHouse数据库迁移至云数据库 SelectDB 版。整个过程通过可视化平台进行操作,简单易用,可大幅降低数据同步到云数据库 SelectDB 版的门槛。

安装部署

1. 安装要求

准备部署X2Doris的机器必须确保有效的网络策略:需要确保网络与数据源、云数据库 SelectDB 版均可连通。

2. 选择安装包

X2Doris底层采用Spark实现,推荐部署到有Hadoop、Yarn的大数据网络环境中,这样可以充分利用大数据的集群能力,能大大提高数据迁移的效率和速度。如果没有大数据环境也可以的,单机部署即可 (X2Doris包含内置的Spark。如果没有Hadoop环境就不要安装伪分布式的Hadoop集群环境了)。X2Doris工具下载链接。

2.1 如果有Spark环境

进入Spark安装目录的jars目录下,查看Spark依赖包对应的Scala版本,如下:可以看到 spark-yarn_2.12-3.2.4.jar, 这里的2.12即为Scala的版本。

image

然后下载与Scala版本对应的X2Doris安装包即可,X2Doris安装包的文件名有Scala的版本,如:selectdb-x2Doris_2.12-1.0.0-bin.tar.gz就是Scala 2.12对应的版本。

2.2 如果没有Spark环境

直接选择Scala2.12对应的X2Doris安装包即可。

3. 解压安装包

tar -zxvf selectdb-x2doris-1.0.3_2.12-bin.tar.gz

4. 初始化元数据

初始化X2Doris程序元数据的数据库,主要有两种选择:h2和mysql。默认的h2是内存数据库,系统重启后会导致X2Doris元数据丢失。如果希望持久化元数据,可以选择mysql作为保存元数据的数据库。

4.1 安装MySQL客户端

4.2 将系统的数据库类型改成MySQL

进入conf目录下,修改application.ymlspring.profiles.active改成mysql

4.3 修改conf/application-mysql.yml文件,指定MySQL的连接信息

image

4.3 执行脚本

进入到script目录下:有两个目录,分别是schemadata

  1. 先执行schema下的mysql-schema.sql完成表结构的初始化。

    1. 登录MySQL客户端 mysql -h host -u user -p password

    2. 执行source mysql-schema.sql

  2. 再执行data下的mysql-data.sql完成元数据初始化。

    1. 登录MySQL客户端 mysql -h host -u user -p password

    2. 执行source mysql-data.sql

警告

注意:默认使用h2数据库,重启后X2Doris元数据会被清空!

启动使用

启动

前置工作都准备就绪了,进入到bin目录下,执行startup.sh

image

登录平台

image

默认访问地址:http://$host:9091,可以在 application.yml 里面修改端口号。 默认用户名密码:admin/selectdb,登录后可在主界面操作修改。

创建作业任务

系统设置

在正式使用平台之前,要做的第一件事就是进入设置中心设置系统参数,该部分参数都为必须要设置的参数,具体如下:

image

说明
  1. Hadoop user:指定提交作业到yarn上的用户(无Hadoop环境跳过)。

  2. Spark Home:如果您有大数据集群,且安装了Spark,则指定下您集群的Spark Home。

  3. Hive metastore uris:如果Hive数据迁移至云数据库 SelectDB 版,需要知道hvie的metastore uri (非hive数据源跳过)。

  4. Target doris info:要写入数据的云数据库 SelectDB 版目标表的连接信息。

点击Target doris info按钮会有弹窗,直接输入相关信息即可,如下:

image

参数说明:

参数

说明

HTTP Nodes

请填写HTTP协议访问地址<ip>:<port>

您可以从云数据库 SelectDB 版控制台的实例详情 > 网络信息中获取VPC地址(或公网地址)和HTTP协议端口

示例:selectdb-cn-4xl3jv1****.selectdbfe.rds.aliyuncs.com:8080

说明

当部署X2Doris的实例和云数据库 SelectDB 版实例属于同一VPC时,使用VPC地址;不属于同一个VPC时,使用公网地址

MySQL Nodes

请填写JDBC连接串<ip>:<port>

您可以从云数据库 SelectDB 版控制台的实例详情 > 网络信息中获取VPC地址(或公网地址)和MySQL协议端口

示例:selectdb-cn-4xl3jv1****.selectdbfe.rds.aliyuncs.com:9030

说明

当部署X2Doris的实例和云数据库 SelectDB 版实例属于同一VPC时,使用VPC地址;不属于同一个VPC时,使用公网地址

User

请填写云数据库 SelectDB 版实例的用户名。

Password

请填写云数据库 SelectDB 版实例对应用户的密码。

Doris to SelectDB

在作业中心点击“新增作业” 选择Doris Source,此时会弹窗,让选择数据源。

image

如果之前没有添加数据源,则需要先添加数据源。

image

1. 添加数据源

点击左侧的“数据源”菜单。此时可以看到所有的数据源列表,可以选择新增一个数据源,这里选择新增一个Doris数据源。

image

此时会弹窗,让输入Doris的连接信息。如:

image

设置Doris的Http节点、Jdbc节点信息、用户名、密码,然后点击确定提交。也可以设置多个节点,格式为ip1:port1,ip2:port2,ip3:port3,多个节点间以逗号分隔。

在此过程中,会自动验证输入的连接信息,如果host、用户名和密码都正确,则会创建成功,页面会自动跳转到“数据源”页面,可以看到刚刚添加的数据源,如:

image

2. 创建同步作业

添加 “数据源” 之后,返回到 “作业中心“ 页面,可以重新点击“新增作业”,选择Doris Source, 此时会弹窗让选择数据源,点击使用即可:

image

此时会跳转到如下页面:页面左侧会将Doris中的数据库和表以树形结构呈现出来。

image

选择要迁移的表,您可以选择一张表,也可以选择多张,或者整库,如果选择单张表:此时会看到DDL语句已经自动生成, 您可以确认这些DDL语句。

重要

只有选择单表才会看到DDL语句,如果选择多表则使用默认生成策略生成的DDL。

确认无误后,您可以根据实际需求,进行建表,或者创建作业,这里的操作有:

  • 跳过建表:用于要迁移的表在云数据库 SelectDB 版目标端已经存在,则可以跳过建表。

  • 只建表:用于只创建表,不创建迁移作业。

  • 创建表&作业:用于同时创建表和迁移作业。

3. 作业设置

在点击创建作业之后会弹出一个任务配置的界面,用户需要在这个界面配置任务迁移所需要的参数,具体示例如下:

image

参数解释如下:

参数

说明

App Name

自动生成,数据迁移任务的名称。

App Tag

自动生成,数据迁移任务的Tag。

Master

需要选择是local模式还是yarn模式,这里是指的X2Doris的任务运行的方式,这个根据实际情况调整。

Yarn Queue

Spark任务运行所使用的队列资源。

Memory Options

这里需要选择Spark任务的一些内存参数,如executor和driver的core的数量和内存大小,这个根据实际情况进行调整。

Write Batch

数据刷写时的批次大小,这个可以根据实际数据量调整大小,如果迁移的数据量比较大,建议该值调整为500000以上。

Max retry

任务失败的重试次数,如果网络情况不理想,可以适当增大此参数。

Spark option

Spark的自定义参数,如果需要增加Spark任务的其他参数,可以在这里添加,以key=value的形式增加即可。

Properties

数据迁移时,如果有针对数据源读取或者Doris数据写入的一些优化参数,可以在这里编写,具体的参数描述可以看对应的Spark connector的官方文档。

在上一步创建完数据迁移任务后,用户就可以在任务详情界面看到刚创建的数据迁移任务,如下图所示:

image

Hive to SelectDB

1. 前置条件

  1. 部署X2Doris的机器必须可以连接Hadoop集群,是Hadoop的一个节点,或至少有Hadoop gateway环境(可以在该机器上执行Hadoop、Hive命令,能正常连接访问Hadoop、Hive集群)。

  2. 部署X2Doris的机器必须配置了Hadoop环境变量,必须配置HADOOP_HOMEHADOOP_CONF_DIRHIVE_CONF_DIR,例如:

export HADOOP_HOME=/opt/hadoop #hadoop 安装目录
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HIVE_HOME=$HADOOP_HOME/../hive
export HIVE_CONF_DIR=$HADOOP_HOME/conf
export HBASE_HOME=$HADOOP_HOME/../hbase
export HADOOP_HDFS_HOME=$HADOOP_HOME/../hadoop-hdfs
export HADOOP_MAPRED_HOME=$HADOOP_HOME/../hadoop-mapreduce
export HADOOP_YARN_HOME=$HADOOP_HOME/../hadoop-yarn
重要

HADOOP_CONF_DIRHIVE_CONF_DIR下必须要有hive-site.xml

2. 配置元数据读取

修改配置文件conf/application-hive.yaml来设置获取Hive元数据方式,目前支持三种:JDBC阿里云 DLFMetastore

  1. Metastore

    这是默认推荐的读取Hive元数据的方式,如果Hive是标准的Apache Hive,则推荐这种方式,直接将client设置为metastore即可。

image

  1. JDBC方式

    如果因为诸如权限等问题,不能使用metastore的方式,则可以尝试使用JDBC的方式,将client设置为JDBC,设置对应的jdbcUrl和用户名、密码,同时可以通过在set后面添加配置来设置链接参数。

image

  1. 阿里云 DLF

    如果Hive是阿里云的Hive,则需要设置client为dlf,填写阿里云DLF服务有效的ak、sk、认证类型、endpoint、regionId以及catalogId。

image

在系统设置(System Settings)中配置Metastore的thrift链接地址:

image

配置好后点击提交(submit)提交配置:

image

提示更新成功表示可以正常连接。

image

3. 设置系统信息

Hive需要设置以下信息,该部分参数都为必须要设置的参数, 具体如下:

参数

说明

Hadoop user

该作业会访问Hive数据,该Hadoop user即为操作Hive表的Hadoop用户(日常Hive作业的操作用户即可)。

Spark Home

指定部署机安装的Spark的路径。

Hive metastore uris

Hive的metastore uri ,可以去$HADOOP_CONF_DIR下查找hive-site.xml的配置获取。

Target doris info

要写入数据的云数据库 SelectDB 版目标表的信息。

image

4. 创建同步作业

系统设置完成之后,就可以进入到作业中心了,这里可以点击添加来创建一个作业:

image

在添加的时候会自动检测Hive环境的连接情况,如果Hive连接失败,会告警:

image

那么此时就需要检查:系统设置 里的Hive metastore uris和当前部署机的通讯是否正常了。这一步必须要确保通过才可以进行后续的迁移工作,如果连接正常就可以直接进行新增作业。

5. 字段类型映射

如果和Hive连接正常,就会自动把Hive数仓中所有的库和表都罗列出来。此时就可以点击左侧的树形目录,选择目标表进行操作,选中一个表之后,右侧会自动罗列出该表与云数据库 SelectDB 版目标表的字段映射关系,可以很轻松的映射目标表的字段类型。根据提示进行操作即可完成字段的映射。DUPLICATE KEYDISTRIBUTED KEY是Doris Duplicate模型中必须要指定的参数,按需进行指定即可。

重要

已经自动识别了Hive表中的分区字段,并且自动强制将分区自动设置为DUPLICATE KEY字段。

image

image

重要
  • 自动生成的Doris DDL建表语句为Duplicate模型, 可以根据实际情况手动修改。

  • STRING类型不能设置为DUPLICATE KEY,需要将STRING类型改成VARCHAR类型即可。

6. 分区映射

如果Hive原表中的分区字段类型是STRING,则可以根据数据实际类型判断是否需要将对应的云数据库 SelectDB 版目标表的字段类型转成时间类型。如果转成时间类型的话,则需要设置分区的区间。

image

7. 创建表

完成前两步即可进入到Doris表DDL的确认阶段,在该阶段已经自动生成了对应的云数据库 SelectDB 版目标表的建表DDL语句,您可以进行Review确认,手动修改 DDL。

image

确认无误后,可以点击创建目标表。

重要

要确保对应Doris的库存在,库需要用户手动创建。

image

image

8. 作业设置

最后一步作业设置具体参数和Doris to SelectDB操作一致。

启动同步作业

在作业中心可以看到所有创建的作业,如下:

image

点击操作里的“启动按钮”,会弹窗对应的窗口。如下:

image

查询条件:该参数是允许在数据迁移的过程中,传入过滤条件,对数据源的数据进行ETL操作。这里在写对应条件的时候,不需要写where关键字,只需要写后边的过滤逻辑即可。

清空数据:这个按钮默认是OFF状态,点击切换到ON状态后,会在每次迁移任务运行前,对目标库的数据进行清除操作,是一个极度危险的操作,生产数据迁移时,慎重操作。

如果没有额外的ETL和清除数据的需求,您只需要点击OK即可运行数据迁移任务。

重要

在运行任务之前,一定要在系统设置里配置SPARK_HOME,否则没有Spark客户端环境,是无法提交Spark任务的。

更新作业迁移进度

启动作业之后,手动点击刷新按钮来查看数据的迁移状态,此时迁移进度会显示出来。如下图:

image

参数优化指南

在Doris/SR to 云数据库 SelectDB 版的场景中,如果您的Doris和yarn资源比较空闲,则可以进一步优化速度,可以在properties设置如下参数:

doris.request.tablet.size=1 #如果数据源是 doris
starrocks.request.tablet.size=1 #如果数据源是 starrocks

该参数作用是:一个RDD Partition对应的Doris Tablet个数。此数值设置越小,则会生成越多的Partition。从而提升Spark侧的并行度,但同时会对Doris造成更大的压力。

image

任务失败如何定位

当数据迁移任务失败后,优先排查安装X2Doris程序的运行日志,对应目录在X2Doris安装目录下的log目录,可以查看selectdb.out来观察和定位程序运行情况。

如果在查看上述日志没有解决问题的话,请携带日志以及该迁移任务运行的上下文背景,寻求SelectDB官方人员的帮助。

测试截图

  • 源Doris

image

  • X2Doris配置

image

image

image

  • X2Doris作业执行过程

image

  • SelectDB同步结果

image