
# MRS Hudi数据源
本数据集成服务全面支持华为云大数据MRS Hudi产品，支持Hudi主流版本，可满足不同用户在多种部署环境下的数据同步需求。
#### 使用前准备及限制
- **网络要求**
  MRS Hudi数据源必须与CDM网络进行通讯，以确保数据传输的顺畅性。详情请参见[网络打通](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_7765.html)。
  
- **权限** **要求**
  - **Hudi读写权限**
    - **读权限** ：如果需要从Hudi读取数据，需要为数据集成服务的IAM用户或用户组授予Hudi的只读权限，如**MRS ReadOnlyAccess** 系统策略，或者根据具体需求创建自定义策略，授予如**SELECT**等读取相关操作的权限。
    
    - **写权限** ：如果需要向Hudi写入数据，除了上述OBS权限外，还需要为数据集成服务的IAM用户或用户组授予Hudi的写入权限，如**MRS CommonOperations** 或**MRS FullAccess** 系统策略，或者创建自定义策略，授予如**INSERT INTO TABLE** 、**CREATE TABLE**等写入相关操作的权限。
    
    - **OBS权限（存算分离场景）：**当MRS-Hudi开启存算分离，数据集成服务将与OBS进行读写文件交互，需要拥有OBS文件的读写权限。
     
  
  - **访问端口放通：** 在配置MRS Hudi数据源时，需要确保以下端口在安全组或自有网络已经放通，以供数据集成服务访问MRS使用。
    表1各服务端口说明 
    | **服务**      | **端口类型**   | **端口号** | **用途**                                        |
    |:---|:---|:---|:---|
    | Spark       | TCP        | 22550   | Spark JDBC Thrift端口，用于Spark客户端与Spark服务器之间的通信。 |
    | MRS Manager | TCP        | 28443   | 下载MRS集群配置。                                    |
    | MRS Manager | TCP        | 20009   | CAS认证端口。                                      |
    | MRS Manager | TCP        | 20029   | Manager与其他组件之间的通信和管理操作。                       |
    | KDC         | TCP\&\&UDP | 21730   | Kerberos认证使用。                                 |
    | KDC         | TCP\&\&UDP | 21731   | Kerberos认证使用。                                 |
    | KDC         | TCP\&\&UDP | 21732   | Kerberos认证使用                                  |
    | HDFS        | TCP        | 8020    | HDFS NameNode服务端口。                            |
    | HDFS        | TCP        | 9866    | HDFS dataNode服务端口。                            |
    | Hudi        | TCP        | 10000   | HudiServer服务端口，用于客户端与HudiServer之间的通信。         |
    | Hudi        | TCP        | 9083    | Hudi Metastore服务端口，用于存储和管理Hudi的元数据信息。         |
    | Zookeeper   | TCP        | 2181    | Zookeeper服务端口，用于客户端与Zookeeper集群之间的通信。         |
       
    
   
 
#### 支持的数据类型
数据集成读取Hudi依赖Spark读取能力支持以下字段：
| 类别    | 字段类型      | MRS Hudi 读取 | MRS Hudi 写入 |
|:---|:---|:---|:---|
| 字符串类  | STRING    | √           | √           |
| 整数类   | TINYINT   | √           | √           |
| 整数类   | INTEGER   | √           | √           |
| 整数类   | SMALLINT  | √           | √           |
| 整数类   | INT       | √           | √           |
| 整数类   | BIGINT    | √           | √           |
| 浮点类   | FLOAT     | √           | √           |
| 浮点类   | DOUBLE    | √           | √           |
| 浮点类   | DECIMAL   | √           | √           |
| 日期时间类 | TIMESTAMP | √           | √           |
| 日期时间类 | DATE      | √           | √           |
| 布尔型   | BOOLEAN   | √           | √           |
| 二进制   | BINARY    | √           | √           |
| 复杂类型  | ARRAY     | √           | √           |
| 复杂类型  | MAP       | √           | √           |
| 复杂类型  | STRUCT    | x           | x           |
   
#### 支持的迁移场景
数据集成离线同步支持以下三种同步方式，以满足不同数据迁移场景的需求：
- **单表同步**
  适用于数据入湖和数据上云场景下，表或文件级别的数据同步。
  
- **分库分表同步**
  适用于数据入湖和数据上云场景下，多库多表同步场景。
  
- **整库迁移**
  适用于数据入湖和数据上云场景下，离线或自建数据库整体同步场景。
  
需要注意的是，分库分表与整库迁移能力会根据不同region的上线支持情况有所不同，具体支持情况以页面为准。以下是针对Hudi的支持迁移场景概览：
| 支持迁移场景 | 单表读取 | 单表写入 | 分库分表读取 | 分库分表写入 | 整库读取 | 整库写入 |
|:---|:---|:---|:---|:---|:---|:---|
| 是否支持   | √    | √    | x      | √      | x    | x    |
   
#### 核心能力速览
- **连接配置**
  
  | 配置项        | 支持情况 | 说明                                   |
  |:---|:---|:---|
  | kerberos认证 | √    | 通过Kerberos认证方式访问MRS集群。               |
  | 存算分离       | √    | 支持存算分离架构，读取OBS/HDFS多种不同Hudi存储文件系统能力。 |
     
  
- **读取能力**
  
  | 配置项   | 支持情况 | 说明                                                   |
  |:---|:---|:---|
  | 增量读取  | √    | 支持通过【where子句】配置增量读取，可按条件筛选数据，高效读取新增或修改部分，避免全量读取。     |
  | 分片并发  | √    | 支持分片并发读取，底层文件被划分为多个分片并行读取，充分利用资源，提升读取性能，尤其适用于大规模数据集。 |
  | 自定义字段 | x    | 可在任务级追加计算列、常量列或脱敏函数，满足个性化业务需求，暂不支持。                  |
  | 脏数据处理 | √    | 支持异常数据写入脏数据桶，避免因少量异常数据导致作业失败。                        |
     
  
- **写入能力**
  
  | 配置项    | 支持情况                                                                                                                | 说明                                                                                                                                                                                                                                                                  |
  |:---|:---|:---|
  | 写入模式   | LOAD TRUNCATE+LOAD INSERT_OVERWRITE | LOAD：适用于数据追加场景，不会对目标表中的已有数据进行任何修改或删除操作，直接将新数据追加到表中。 TRUNCATE+LOAD：在写入数据前，会先清空目标分区中的所有数据，然后将新数据写入。这种方式适合于需要完全替换分区数据的场景。 INSERT_OVERWRITE：对目标分区的数据进行覆盖写入，可以根据指定的条件或规则，对分区中的数据进行更新或替换。 |
  | 导入前后处理 | √                                                                                                                   | 支持TRUNCATE+LOAD方式对选用分区进行清空。                                                                                                                                                                                                                                         |
  | 脏数据处理  | x                                                                                                                   | 支持异常数据写入脏数据桶，避免因少量异常数据导致作业失败，暂不支持。                                                                                                                                                                                                                                  |
  | 并发写入   | √                                                                                                                   | 并发写入可以充分利用集群资源，提高数据写入的速度。                                                                                                                                                                                                                                           |
  | 运行态建表  | √                                                                                                                   | 在数据写入过程中动态创建表。如果目标表不存在，Hudi会根据写入的数据自动创建表结构，无需预先手动创建表。                                                                                                                                                                                                               |
  | 编辑态建表  | √                                                                                                                   | 在作业编辑过程中手动创建表。用户可以根据数据的结构和需求，提前定义表的结构、字段类型、分区策略等。                                                                                                                                                                                                                   |
     
  
 
#### 创建数据源
在DataArts Studio管理中心新建相应的数据源，详情请参见[创建DataArts Studio数据连接](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0009.html)。
#### 创建数据集成离线作业
在DataArts Studio数据开发中新建MRS Hudi集成作业，详情请参见[新建离线处理集成作业](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1458.html)。
#### 最佳实践
[Hudi Load/Truncate+Load/Insert Overwrite写入模式最佳实践](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1537.html)
