通过CDM将Hive外表数据迁移到MRS Doris
应用场景
云数据迁移(Cloud Data Migration,简称CDM),是一种高效、易用的批量数据迁移服务。 CDM围绕大数据迁移上云和智能数据湖解决方案,提供了简单易用的迁移能力和多种数据源到数据湖的集成能力,降低了客户数据源迁移和集成的复杂性,有效地提高您数据迁移和集成的效率。
离线数据,端到端时延无要求的场景下,可使用CDM进行将离线的Hive外表数据迁移到MRS Doris。
方案架构
离线数据可以从数据湖加载,也可以直接加载本地文件。从数据湖加载可以使用工具CDM,在没有CDM工具时,可以直接使用外表加载、BrokerLoad的方式。
本地文件加载则使用Doris自带的StreamLoad工具。

- 场景特点:
- 数据加载方式:
- 在存在DataArts Studio工具的场景下,数据加载统一使用CDM进行(DataArts Studio需要2.10及以上版本)。
- 在不存在DataArts Studio工具的场景下,可以使用Spark或者外表方式加载。由数据加工方进行数据推送加载时,推荐使用BrokerLoad加载方式,方便数据加工方统一调度;如果有数据应用方负责数据加载,则使用外表方式进行数据加载较为方便应用层另外配置加载数据。
- 在没有数据湖的场景下,轻量化数仓场景中,数据直接由源端文件加载到Doris中,可以使用Streamload方式加载本地文件。
- 注意事项:
约束与限制
DataArts Studio实例、CDM集群、MRS集群需要具有相同的“虚拟私有云”和“安全组”。
步骤1:创建MRS集群并配置
- 已创建DataArts Studio实例。
详细操作请参考购买DataArts Studio实例,实例创建后需记录“虚拟私有云”和“安全组”信息。
- 已创建CDM集群。
详细操作请参考创建CDM集群,其中“虚拟私有云”和“安全组”需要与已创建的DataArts Studio实例保持一致。
- 创建具有访问OBS权限的ECS委托。
详细操作请参考配置MRS集群通过IAM委托对接OBS中“创建具有访问OBS权限的ECS委托”部分,例如委托名称为“mrs_ecs_obs”。
- 创建包含Hive、Spark等组件的MRS集群。
- 创建MRS集群。
详细操作请参考自定义购买MRS集群,例如相关参数如下:
- 集群名称:自定义,例如“mrs_test”
- 版本类型:LTS版
- 集群版本:MRS 3.3.0-LTS
- 集群组件包含:Hive、Spark等
- “虚拟私有云”和“安全组”需要与已创建的DataArts Studio实例保持一致。
- Kerberos认证:开启
其他参数根据实际需要进行配置。
- 等待集群创建成功后,在MRS管理控制台“现有集群”中单击已创建的MRS集群名称。
在集群“概览”页签单击“委托”后的“选择委托”,选择已创建的委托名称(例如“mrs_ecs_obs”),单击“确定”。
图2 选择委托 - 创建拥有Hive权限的用户。
- 登录集群Manager页面,详细操作请参考访问MRS集群Manager。
- 在Manager界面选择“系统 > 权限 > 角色”创建一个Hive角色(例如“hiverole”),详细操作请参考创建Hive角色。
- 选择“系统 > 权限 > 用户 > 添加用户”,根据界面提示创建一个人机用户(例如hiveuser),并绑定新创建的Hive角色(例如“hiverole”)。
- 使用新创建的用户(例如hiveuser)登录Manager,并根据提示修改初始密码。
- 集群购买完成后安装集群全量客户端,详细操作请参考安装客户端(3.x版本)。
例如客户端安装路径为“/opt/client”。
- 在本示例中,MRS Hive外表中已存在数据,订单表lineorder且有存量数据。
CREATE TABLE `lineorder`( `lo_orderkey` bigint, `lo_linenumber` int, `lo_custkey` bigint, `lo_partkey` bigint, `lo_suppkey` bigint, `lo_orderpriority` varchar(100), `lo_shippriority` int, `lo_quantity` int, `lo_extendedprice` bigint, `lo_ordtotalprice` bigint, `lo_discount` int, `lo_revenue` bigint, `lo_supplycost` int, `lo_tax` int, `lo_commitdate` date, `lo_shipmode` varchar(100) ) PARTITIONED BY (`lo_orderdate` date) LOCATION 'obs目录';
- 创建MRS集群。
- 创建MRS Doris集群,并在Doris集群内节点安装MySQL客户端。
- 创建MRS Doris集群。
详细操作请参考自定义购买MRS集群,例如相关参数如下:
- 集群名称:自定义,例如“mrs_doris”。
- 版本类型:LTS版
- 集群版本:MRS 3.3.0-LTS
- 组件选择:Doris集群
- “虚拟私有云”和“安全组”需要与已创建的DataArts Studio实例保持一致。
- Kerberos认证:开启
其他参数根据实际需要进行配置。
- 等待集群创建成功后,在MRS管理控制台“现有集群”中单击已创建的MRS集群名称。
- 在Doris集群安装MySQL客户端。
详细操作请参考使用MySQL客户端连接Doris。
- 创建拥有Doris管理权限的人机用户(例如用户名为dorisuser),并修改初始密码。
- 登录Doris集群Manager页面。
- 选择“系统 > 权限 > 角色 > 添加角色”,填写角色名称,如“dorisrole”,在“配置资源权限”选择“待操作的集群 > Doris”,勾选“Doris管理员权限”,单击“确定”。
- 选择“用户 > 添加用户”,填写用户名称,如“dorisuser”,“用户类型”选择“人机”,“密码策略”默认,输入用户密码并确认密码,关联“dorisrole”角色,单击“确定”。
- 使用新建的dorisuser用户重新登录FusionInsight Manager,修改该用户初始密码。
- 创建Doris数据库。
- 使用dorisuser用户登录FusionInsight Manager页面。
- 选择“集群 > 服务 > Doris”。
- 在概览页面,单击“FE WebUI”右侧的超链接进入Doris WebUI登录页面。
- 输入具有Doris管理权限的用户名和密码,单击“Login”。
- 在“Playground”中输入以下命令创建数据库。
create database databasename;
- 创建MRS Doris集群。
步骤2:在CDM创建Hive和Doris连接
- 创建CDM MRS Hive支持OBS的连接。
- 在CDM集群管理界面,单击集群后的“作业管理”,选择“连接管理 > 新建连接”,进入连接器类型的选择界面。
- 连接器类型选择“MRS Hive”,单击“下一步”,参考下表配置MRS Hive连接的参数,其它配置保持默认即可。
表1 MRS Hive连接参数 参数名
取值样例
说明
名称
hive_obs_link
连接的名称,自定义。
Manager IP
x.x.x.x
MRS Manager的浮动IP地址,可以单击输入框后的“选择”来选定已创建的MRS集群,CDM会自动填充下面的鉴权参数。
此处选择新创建的包含Hive组件的MRS集群。
认证类型
KERBEROS
访问MRS的认证类型
Hive版本
HIVE_3_X
Hive的版本。根据服务端Hive版本设置。
用户名
hiveuser
新创建的拥有Hive权限的用户。
密码
xxx
填写用户密码,此处填写为修改后的hiveuser用户密码。
开启LDAP认证
否
通过代理连接的时候,此项可配置。
OBS支持
是
开启后,在创建Hive表时,您可以指定将表存储在OBS中。
访问标识(AK)
xxxxx
此处AK/SK对应的账号应具备OBS Buckets Viewer系统权限,否则会无法访问OBS并报“403 AccessDenied”错误。
您需要先创建当前账号的访问密钥,并获得对应的AK和SK。
- 登录控制台,在用户名下拉列表中选择“我的凭证”。
- 进入“我的凭证”页面,选择“访问密钥 > 新增访问密钥”。
- 单击“确定”,根据浏览器提示,保存密钥文件。密钥文件会直接保存到浏览器默认的下载文件夹中。打开名称为“credentials.csv”的文件,即可查看访问密钥AK(Access Key Id)和SK(Secret Access Key)。
密钥(SK)
xxxxxx
运行模式
EMBEDDED
- EMBEDDED:连接实例与CDM运行在一起,该模式性能较好。
- STANDALONE:连接实例运行在独立进程。
检查Hive JDBC连通性
是
是否需要测试Hive JDBC连通。
是否使用集群配置
否
您可以通过使用集群配置,简化Hadoop连接参数配置。
图3 创建MRS Hive连接 - 单击“测试”,测试连接通过。
- 单击“保存”。
- 创建CDM MRS Doris数据连接。
- 上传MySQL驱动。
- 在“集群管理”界面,单击集群后的“作业管理”,选择“连接管理 > 新建连接”,进入连接器类型的选择界面。
- 连接器类型选择“MySQL”,单击“下一步”,参考下表配置MySQL连接的参数,其它配置保持默认即可。
表2 MRS Doris连接参数 参数名
取值样例
说明
名称
doris_link
连接的名称,自定义。
数据库服务器
x.x.x.x
Doris实例FE的IP。
可通过登录MRS Doris集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一FE实例的业务IP地址获取。
端口
9030
Doris FE的查询连接端口,默认为9030。
可通过登录MRS Doris集群的Manager界面,选择“集群 > 服务 > Doris > 配置 > 全部配置”,搜索并查看“query_port”参数值获取。
数据库名称
databasename
已创建的数据库名称。
用户名
dorisuser
新创建的拥有Doris权限的用户。
密码
xxx
填写用户密码,此处填写为修改后的dorisuser用户密码。
图4 创建MRS Doris连接 - 单击“测试”,测试连接通过。
- 单击“保存”。
步骤3:Hive外表数据通过CDM迁移到Doris
- 创建Doris的Unique表。
- 登录Doris集群中已安装好MySQL客户端的节点,执行如下命令进入Doris数据库。
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1 //若集群已启用Kerberos认证(安全模式)需执行该命令。
mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
- 数据库连接端口为Doris FE的查询连接端口,可通过登录MRS Doris集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一FE实例的业务IP地址获取。
- Doris FE实例IP地址可通过登录MRS Doris集群的Manager界面,选择“集群 > 服务 > Doris > 配置 > 全部配置”,搜索并查看“query_port”参数值获取。
- 执行以下命令创建Doris的Unique表,写入数据不重复。
create database test;
use test;
CREATE TABLE `lineorder_u` ( `LO_ORDERKEY` bigint NOT NULL COMMENT "订单id", `LO_LINENUMBER` int NOT NULL COMMENT "订单码", `LO_CUSTKEY` bigint NOT NULL COMMENT "客户id", `LO_PARTKEY` bigint NOT NULL COMMENT "商品id", `LO_SUPPKEY` bigint NOT NULL COMMENT "供应商id", `LO_ORDERDATE` date DEFAULT NULL COMMENT "订单日期", `LO_ORDERPRIORITY` varchar(100) DEFAULT NULL COMMENT "订单优先级", `LO_SHIPPRIORITY` int DEFAULT NULL COMMENT "物流优先级", `LO_QUANTITY` int DEFAULT NULL COMMENT "数量", `LO_EXTENDEDPRICE` bigint DEFAULT NULL COMMENT "扩展价格", `LO_ORDTOTALPRICE` bigint DEFAULT NULL COMMENT "订单总价", `LO_DISCOUNT` int DEFAULT NULL COMMENT "折扣", `LO_REVENUE` bigint DEFAULT NULL COMMENT "收入", `LO_SUPPLYCOST` int DEFAULT NULL COMMENT "成本", `LO_TAX` int DEFAULT NULL COMMENT "税款", `LO_COMMITDATE` date DEFAULT NULL COMMENT "承诺日期", `LO_SHIPMODE` varchar(100) NOT NULL COMMENT "运输方式" ) UNIQUE KEY ( `LO_ORDERKEY`, `LO_LINENUMBER`, `LO_CUSTKEY`, `LO_PARTKEY`, `LO_SUPPKEY`, `LO_ORDERDATE` ) PARTITION BY RANGE(`LO_ORDERDATE`) ( PARTITION `p1992` VALUES LESS THAN ("1993-01-01"), PARTITION `p1993` VALUES LESS THAN ("1994-01-01"), PARTITION `p1994` VALUES LESS THAN ("1995-01-01"), PARTITION `p1995` VALUES LESS THAN ("1996-01-01"), PARTITION `p1996` VALUES LESS THAN ("1997-01-01"), PARTITION `p1997` VALUES LESS THAN ("1998-01-01"), PARTITION `p1998` VALUES LESS THAN ("1999-01-01"), PARTITION `p1999` VALUES LESS THAN ("2000-01-01"), PARTITION `p2000` VALUES LESS THAN ("2001-01-01"), PARTITION `p2001` VALUES LESS THAN ("2002-01-01") ) DISTRIBUTED BY HASH(`LO_ORDERDATE`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 3" );
- 登录Doris集群中已安装好MySQL客户端的节点,执行如下命令进入Doris数据库。
- 创建CDM作业,迁移Hive数据到Doris。
- 进入CDM集群管理界面,单击待操作集群后的“作业管理”。
- 选择“表/文件迁移 > 新建作业”,进入作业配置界面。参考下表配置相关参数,其它配置保持默认即可。
表3 新建作业参数 参数名
取值样例
说明
作业名称
hive2doris_u
自定义。
源连接名称
hive_obs_link
选择已创建的Hive连接名称。
数据库名称
databasename1
根据实际情况配置。
表名
tablename1
根据实际情况配置。
目的连接名称
doris_link
选择已创建的Doris连接名称。
模式或表空间
databasename2
数据库名,根据实际情况配置。
表名
tablename2
根据实际情况配置。
图5 新建作业 - 单击“下一步”进入字段映射的操作页面。确认字段映射界面字段映射正确。
- 单击“下一步”,确认配置界面信息。若迁移数据量较大,可适当调整“抽取并发数”参数。
图6 任务配置
- 单击“保存并运行”回到作业管理界面,并等待作业运行成功。
- 进入Doris客户端,查看数据迁移情况。
- 登录Doris集群中已安装好MySQL客户端的节点,执行如下命令进入Doris数据库。
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1 //若集群已启用Kerberos认证(安全模式)需执行该命令。
mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
- 数据库连接端口为Doris FE的查询连接端口,可通过登录MRS Doris集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一FE实例的业务IP地址获取。
- Doris FE实例IP地址可通过登录MRS Doris集群的Manager界面,选择“集群 > 服务 > Doris > 配置 > 全部配置”,搜索并查看“query_port”参数值获取。
- 执行以下语句,查看数据迁移情况。
create database test;
use test;
select count(*) from lineorder_u;
select * from lineorder_u;
- 查看数据迁移情况符合预期。
Doris的unique字段重复的数据只保留最后写入的数据。
例如Hive表数据共20行,其中10行数据对应Doris的unique字段重复。
Doris的unique表数据:
- 登录Doris集群中已安装好MySQL客户端的节点,执行如下命令进入Doris数据库。