
# 通过CDM将Hive外表数据迁移到MRS Doris
#### 应用场景
云数据迁移（Cloud Data Migration，简称CDM），是一种高效、易用的批量数据迁移服务。 CDM围绕大数据迁移上云和智能数据湖解决方案，提供了简单易用的迁移能力和多种数据源到数据湖的集成能力，降低了客户数据源迁移和集成的复杂性，有效地提高您数据迁移和集成的效率。
离线数据，端到端时延无要求的场景下，可使用CDM进行将离线的Hive外表数据迁移到MRS Doris。
#### 方案架构
离线数据可以从数据湖加载，也可以直接加载本地文件。从数据湖加载可以使用工具CDM，在没有CDM工具时，可以直接使用外表加载、BrokerLoad的方式。
本地文件加载则使用Doris自带的StreamLoad工具。
图1离线数据加载   
![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002378880988.png "点击放大")
- 场景特点： 业务特点为离线数据，端到端时延无要求，仅对数据集市中的数据查询时延有要求，如离线报表场景、实时报表的数据初始化场景。
  
- 数据加载方式：
  - 在存在DataArts Studio工具的场景下，数据加载统一使用CDM进行（DataArts Studio需要2.10及以上版本）。
  
  - 在不存在DataArts Studio工具的场景下，可以使用Spark或者外表方式加载。由数据加工方进行数据推送加载时，推荐使用BrokerLoad加载方式，方便数据加工方统一调度；如果有数据应用方负责数据加载，则使用外表方式进行数据加载较为方便应用层另外配置加载数据。
  
  - 在没有数据湖的场景下，轻量化数仓场景中，数据直接由源端文件加载到Doris中，可以使用Streamload方式加载本地文件。
   
- 注意事项： Hive外表通过整体添加Hive的MetaStore的方式，将全量元数据在Doris中呈现。
  
 
#### 操作流程
- [步骤1：创建MRS集群并配置]
- [步骤2：在CDM创建Hive和Doris连接]
- [步骤3：Hive外表数据通过CDM迁移到Doris]
 
#### 约束与限制
DataArts Studio实例、CDM集群、MRS集群需要具有相同的"虚拟私有云"和"安全组"。
 #### 步骤1：创建MRS集群并配置
1. 已创建DataArts Studio实例。 
   详细操作请参考[购买DataArts Studio实例](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0115.html)，实例创建后需记录"虚拟私有云"和"安全组"信息。
   
   
2. 已创建CDM集群。 
   详细操作请参考[创建CDM集群](https://support.huaweicloud.com/usermanual-cdm/cdm_01_0018.html)，其中"虚拟私有云"和"安全组"需要与已创建的DataArts Studio实例保持一致。
   
   
3. 创建具有访问OBS权限的ECS委托。 
   详细操作请参考[配置MRS集群通过IAM委托对接OBS](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0768.html)中"创建具有访问OBS权限的ECS委托"部分，例如委托名称为"mrs_ecs_obs"。
   
   
4. 创建包含Hive、Spark等组件的MRS集群。 
   1. 创建MRS集群。 详细操作请参考[自定义购买MRS集群](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0513.html)，例如相关参数如下：
      - 集群名称：自定义，例如"mrs_test"
      
      - 版本类型：LTS版
      
      - 集群版本：MRS 3.3.0-LTS
      
      - 集群组件包含：Hive、Spark等
      
      - "虚拟私有云"和"安全组"需要与已创建的DataArts Studio实例保持一致。
      
      - Kerberos认证：开启
      
      
      其他参数根据实际需要进行配置。
      
   
   2. 等待集群创建成功后，在MRS管理控制台"现有集群"中单击已创建的MRS集群名称。 在集群"概览"页签单击"委托"后的"选择委托"，选择已创建的委托名称（例如"mrs_ecs_obs"），单击"确定"。
      图2选择委托   
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002058115262.png "点击放大") 
   
   3. 创建拥有Hive权限的用户。
      1. 登录集群Manager页面，详细操作请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
      
      2. 在Manager界面选择"系统 \> 权限 \> 角色"创建一个Hive角色（例如"hiverole"），详细操作请参考[创建Hive角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0949.html)。
      
      3. 选择"系统 \> 权限 \> 用户 \> 添加用户"，根据界面提示创建一个人机用户（例如**hiveuser**），并绑定新创建的Hive角色（例如"hiverole"）。
      
      4. 使用新创建的用户（例如**hiveuser**）登录Manager，并根据提示修改初始密码。
       
   
   4. 集群购买完成后安装集群全量客户端，详细操作请参考[安装客户端（3.x版本）](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
      例如客户端安装路径为"/opt/client"。
      
   
   5. 在本示例中，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目录';
      ```
      
   
   
   
   
5. 创建MRS Doris集群，并在Doris集群内节点安装MySQL客户端。 
   1. 创建MRS Doris集群。 详细操作请参考[自定义购买MRS集群](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0513.html)，例如相关参数如下：
      - 集群名称：自定义，例如"mrs_doris"。
      
      - 版本类型：LTS版
      
      - 集群版本：MRS 3.3.0-LTS
      
      - 组件选择：Doris集群
      
      - "虚拟私有云"和"安全组"需要与已创建的DataArts Studio实例保持一致。
      
      - Kerberos认证：开启
      
      
      其他参数根据实际需要进行配置。
      
   
   2. 等待集群创建成功后，在MRS管理控制台"现有集群"中单击已创建的MRS集群名称。 在集群"概览"页签单击"委托"后的"选择委托"，选择已创建的委托名称（例如"mrs_ecs_obs"），单击"确定"。
      
   
   3. 在Doris集群安装MySQL客户端。 详细操作请参考[使用MySQL客户端连接Doris](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249271.html)。
      
   
   4. 创建拥有Doris管理权限的人机用户（例如用户名为**dorisuser** ），并修改初始密码。
      1. 登录Doris集群Manager页面。
      
      2. 选择"系统 \> 权限 \> 角色 \> 添加角色"，填写角色名称，如"dorisrole"，在"配置资源权限"选择"*待操作的集群* \> Doris"，勾选"Doris管理员权限"，单击"确定"。
      
      3. 选择"用户 \> 添加用户"，填写用户名称，如"dorisuser"，"用户类型"选择"人机"，"密码策略"默认，输入用户密码并确认密码，关联"dorisrole"角色，单击"确定"。
      
      4. 使用新建的**dorisuser**用户重新登录FusionInsight Manager，修改该用户初始密码。
       
   
   5. 创建Doris数据库。
      1. 使用**dorisuser**用户登录FusionInsight Manager页面。
      
      2. 选择"集群 \> 服务 \> Doris"。
      
      3. 在概览页面，单击"FE WebUI"右侧的超链接进入Doris WebUI登录页面。
      
      4. 输入具有Doris管理权限的用户名和密码，单击"Login"。
      
      5. 在"Playground"中输入以下命令创建数据库。
         ```
         create database databasename;
         ```
         
       
   
   
   
   
 
 #### 步骤2：在CDM创建Hive和Doris连接
1. 创建CDM MRS Hive支持OBS的连接。 
   1. 在CDM集群管理界面，单击集群后的"作业管理"，选择"连接管理 \> 新建连接"，进入连接器类型的选择界面。
   
   2. 连接器类型选择"MRS Hive"，单击"下一步"，参考下表配置MRS Hive连接的参数，其它配置保持默认即可。
      表1MRS 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。 1. 登录控制台，在用户名下拉列表中选择"我的凭证"。  2. 进入"我的凭证"页面，选择"访问密钥 \> 新增访问密钥"。  3. 单击"确定"，根据浏览器提示，保存密钥文件。密钥文件会直接保存到浏览器默认的下载文件夹中。打开名称为"credentials.csv"的文件，即可查看访问密钥AK（Access Key Id）和SK（Secret Access Key）。   |
      | 密钥(SK)         | xxxxxx        | 此处AK/SK对应的账号应具备OBS Buckets Viewer系统权限，否则会无法访问OBS并报"403 AccessDenied"错误。 您需要先创建当前账号的访问密钥，并获得对应的AK和SK。 1. 登录控制台，在用户名下拉列表中选择"我的凭证"。  2. 进入"我的凭证"页面，选择"访问密钥 \> 新增访问密钥"。  3. 单击"确定"，根据浏览器提示，保存密钥文件。密钥文件会直接保存到浏览器默认的下载文件夹中。打开名称为"credentials.csv"的文件，即可查看访问密钥AK（Access Key Id）和SK（Secret Access Key）。   |
      | 运行模式           | EMBEDDED      | - EMBEDDED：连接实例与CDM运行在一起，该模式性能较好。  - STANDALONE：连接实例运行在独立进程。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
      | 检查Hive JDBC连通性 | 是             | 是否需要测试Hive JDBC连通。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
      | 是否使用集群配置       | 否             | 您可以通过使用集群配置，简化Hadoop连接参数配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
         
      图3创建MRS Hive连接   
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002093843041.png "点击放大") 
   
   3. 单击"测试"，测试连接通过。
   
   4. 单击"保存"。
   
   
   
   
2. 创建CDM MRS Doris数据连接。 
   1. 上传MySQL驱动。
      1. 进入CDM主界面，单击左侧导航上的"集群管理"，选择CDM集群后的"作业管理 \> 连接管理 \> 驱动管理"，进入驱动管理页面。
      
      2. 在"驱动管理"页面，单击MySQL驱动"建议版本"列中的资料链接，按照相应指导获取驱动文件。
      
      3. 在"驱动管理"页面中，选择以下方式上传MySQL驱动。 方式一：单击对应驱动名称右侧操作列的"上传"，选择本地已下载的驱动。
         方式二：单击对应驱动名称右侧操作列的"从sftp复制"，配置sftp连接器名称和驱动文件路径。
         
       
   
   2. 在"集群管理"界面，单击集群后的"作业管理"，选择"连接管理 \> 新建连接"，进入连接器类型的选择界面。
   
   3. 连接器类型选择"MySQL"，单击"下一步"，参考下表配置MySQL连接的参数，其它配置保持默认即可。
      表2MRS 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连接   
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002057922760.png "点击放大") 
   
   4. 单击"测试"，测试连接通过。
   
   5. 单击"保存"。
   
   
   
   
 
 #### 步骤3：Hive外表数据通过CDM迁移到Doris
1. 创建Doris的Unique表。 
   1. 登录Doris集群中已安装好MySQL客户端的节点，执行如下命令进入Doris数据库。
      ```
      export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1 //若集群已启用Kerberos认证（安全模式）需执行该命令。
      ```
      ```
      mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
      ```
      ![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/note_3.0-zh-cn.png)
      - 数据库连接端口为Doris FE的查询连接端口，可通过登录MRS Doris集群的Manager界面，选择"集群 \> 服务 \> Doris \> 实例"，查看任一FE实例的业务IP地址获取。
      
      - Doris FE实例IP地址可通过登录MRS Doris集群的Manager界面，选择"集群 \> 服务 \> Doris \> 配置 \> 全部配置"，搜索并查看"query_port"参数值获取。
        
   
   2. 执行以下命令创建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"
      );
      ```
      
   
   
   
   
2. 创建CDM作业，迁移Hive数据到Doris。 
   1. 进入CDM集群管理界面，单击待操作集群后的"作业管理"。
   
   2. 选择"表/文件迁移 \> 新建作业"，进入作业配置界面。参考下表配置相关参数，其它配置保持默认即可。
      表3新建作业参数 
      | 参数名    | 取值样例               | 说明               |
      |:---|:---|:---|
      | 作业名称   | hive2doris_u       | 自定义。             |
      | 源连接名称  | hive_obs_link      | 选择已创建的Hive连接名称。  |
      | 数据库名称  | *databasename* *1* | 根据实际情况配置。        |
      | 表名     | *tablename1*       | 根据实际情况配置。        |
      | 目的连接名称 | doris_link         | 选择已创建的Doris连接名称。 |
      | 模式或表空间 | *databasename2*    | 数据库名，根据实际情况配置。   |
      | 表名     | *tablename2*       | 根据实际情况配置。        |
         
      图5新建作业   
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002057764448.png "点击放大") 
   
   3. 单击"下一步"进入字段映射的操作页面。确认字段映射界面字段映射正确。
   
   4. 单击"下一步"，确认配置界面信息。若迁移数据量较大，可适当调整"抽取并发数"参数。
      图6任务配置   
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002093843085.png "点击放大") 
   
   5. 单击"保存并运行"回到作业管理界面，并等待作业运行成功。
   
   
   
   
3. 进入Doris客户端，查看数据迁移情况。 
   1. 登录Doris集群中已安装好MySQL客户端的节点，执行如下命令进入Doris数据库。
      ```
      export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1 //若集群已启用Kerberos认证（安全模式）需执行该命令。
      ```
      ```
      mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
      ```
      ![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/note_3.0-zh-cn.png)
      - 数据库连接端口为Doris FE的查询连接端口，可通过登录MRS Doris集群的Manager界面，选择"集群 \> 服务 \> Doris \> 实例"，查看任一FE实例的业务IP地址获取。
      
      - Doris FE实例IP地址可通过登录MRS Doris集群的Manager界面，选择"集群 \> 服务 \> Doris \> 配置 \> 全部配置"，搜索并查看"query_port"参数值获取。
        
   
   2. 执行以下语句，查看数据迁移情况。
      ```
      create database test;
      ```
      ```
      use test;
      ```
      ```
      select count(*) from lineorder_u;
      ```
      ```
      select * from lineorder_u;
      ```
      
   
   3. 查看数据迁移情况符合预期。 Doris的unique字段重复的数据只保留最后写入的数据。
      例如Hive表数据共20行，其中10行数据对应Doris的unique字段重复。
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002093961629.png "点击放大")
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002057764460.png "点击放大")
      Doris的unique表数据：
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002093843089.png)
      ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002057922796.png "点击放大")
      
   
   
   
   
 
