
# 添加Hudi数据源
#### 操作场景
HetuEngine支持查询COW/MOR类型表数据。本章节指导用户在HSConsole界面配置Hudi类型数据源。
#### 约束与限制
- 本章节仅适用于MRS 3.3.0-LTS及之后版本。
- HetuEngine不支持Hudi的bootstrap表的读取。
- MRS 3.6.0-LTS及之后版本，HetuEngine支持查询Hudi MOR的changelog表。
 
#### 添加Hudi数据源前提条件
- 创建Hudi数据源的代理用户，该代理用户为人机用户且需拥有hive组。
- 在HetuEngine所在集群的所有节点的"/etc/hosts"文件中，添加待对接数据源所在集群的主机名称和对应的IP映射（数据源集群新扩容主机后，需要同步添加至HetuEngine所在集群的所有节点，集群外客户端需与HetuEngine集群保持一致），及其"/etc/hosts"文件中的"10.10.10.10 hadoop.*系统域名*"（如"10.10.10.10 hadoop.hadoop.com"），否则HetuEngine无法根据主机名称连接到非本集群节点。
- 参考[创建HetuEngine权限角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1714.html)创建HetuEngine管理员用户。
- MRS 3.6.0-LTS及之后版本，数据源所在集群与HetuEngine集群的时间需保持一致。
 
#### 添加Hudi数据源操作步骤
1. 获取Hudi数据源集群的"hdfs-site.xml"和"core-site.xml"配置文件。
   
   1. 登录Hudi数据源所在集群的Manager页面。 登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
      
   
   2. 在"主页"右上方单击"下载客户端"，根据界面提示下载"完整客户端"文件到本地。
   
   3. 将下载的客户端文件压缩包解压，获取"FusionInsight_Cluster_1_Services_ClientConfig/HDFS/config"路径下的"core-site.xml"和"hdfs-site.xml"。 若对接的Hudi数据源集群和HetuEngine处于同一个Hadoop集群中，"hdfs-site.xml"和"core-site.xml"配置文件的获取方式为从HDFS中获取，参考[HDFS客户端使用实践](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1663.html)进入集群HDFS客户端，执行以下命令获取：
      ```
      hdfs dfs -get /user/hetuserver/fiber/restcatalog/hive/core-site.xml
      hdfs dfs -get /user/hetuserver/fiber/restcatalog/hive/hdfs-site.xml
      ```
      
   
   4. 查看"core-site.xml"文件中是否有"fs.trash.interval"配置项，若没有，则新增以下配置。
      ```
      <property>
      <name>fs.trash.interval</name>
      <value>2880</value>
      </property>
      ```
      
   
   5. 查看"hdfs-site.xml"文件中的"dfs.client.failover.proxy.provider.*NameService名称* "配置项，并将其值修改成"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"。
      以NameService名称为"hacluster"为例：
      ```
      <property>
      <name>dfs.client.failover.proxy.provider.hacluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
      </property>
      ```
      
   
   
   
   
2. 获取Hudi数据源的代理用户的"user.keytab"和"krb5.conf"文件。
   
   1. 登录Hudi数据源所在集群的Manager页面。 登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
      
   
   2. 选择"系统 \> 权限 \> 用户"。
   
   3. 选择对应的数据源用户，在"操作"列中选择"更多 \> 下载认证凭据"。Hudi数据源的代理用户需至少关联"hive"用户组。
   
   4. 从下载的文件中解压后获取"user.keytab"和"krb5.conf"文件。
   
   
   
   
3. 获取Metastore URL和服务端Principal。
   
   1. 获取Hudi数据源所在集群客户端文件压缩包解压路径下的"FusionInsight_Cluster_1_Services_ClientConfig/Hive/config"下的"hive-site.xml"文件。
   
   2. 打开"hive-site.xml"文件。
      - 搜索"hive.metastore.uris"，其对应的值即为Metastore URL的值。
      
      - 搜索"hive.server2.authentication.kerberos.principal"，其对应的值即为服务端Principal的值。
       
   
   
   
   
4. 使用HetuEngine管理员用户登录Manager界面。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
5. 选择"集群 \> 服务 \> HetuEngine"，进入HetuEngine服务页面。
6. 在"概览"页签下的"基本信息"区域，单击"HSConsole WebUI"后的链接，进入HSConsole界面。
7. 选择"数据源"，单击"添加数据源"。在"添加数据源"页面填写参数。 
   1. 配置"基本配置"，填写数据源名称，"数据源类型"选择"Hudi"，"驱动"默认为"hudi"。
   
   2. 配置"Hudi配置"，参数配置请参考[表1]。
       表1Hudi配置 
      | 参数          | 描述                                                                                                                                    | 取值样例      |
      |:---|:---|:---|
      | hdfs-site文件 | 在本地选择[1]获取的"hdfs-site.xml"配置文件，文件名固定。                                                                     | -         |
      | core-site文件 | 在本地选择[1]获取的"core-site.xml"配置文件，文件名固定。                                                                     | -         |
      | krb5文件      | 集群已启用Kerberos认证（安全模式）时填写此参数。 Kerberos认证用到的配置文件，在本地选择[2]获取的"krb5.conf"文件。 | krb5.conf |
         
      
   
   3. 配置"Metastore配置"，参数配置请参考[表2]。
       表2Metastore配置 
      | 参数            | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 取值样例                                                                          |
      |:---|:---|:---|
      | Metastore URL | 数据源的Metastore的URL。获取方法请参考[3]。                                                                                                                                                                                                                                                                                                                                                                                             | thrift://10.92.8.42:21088,thrift://10.92.8.43:21088,thrift://10.92.8.44:21088 |
      | 安全认证机制        | 集群已启用Kerberos认证（安全模式）时自动默认为KERBEROS。                                                                                                                                                                                                                                                                                                                                                                                                                   | KERBEROS                                                                      |
      | 服务端Principal  | 集群已启用Kerberos认证（安全模式）时填写此参数。 meta访问metastore带域名的用户名。获取方法请参考[3]。                                                                                                                                                                                                                                                                                                                             | hive/hadoop.hadoop.com@HADOOP.COM                                             |
      | 客户端Principal  | 集群已启用Kerberos认证（安全模式）时填写此参数。 格式为：*访问metastore的用户名* @*域名大写*.COM。 - *访问metastore的用户名：* [2]中获取的"user.keytab"文件所属的用户。  - 系统域名：用户可登录Manager界面，选择"系统 \> 权限 \> 域和互信"，查看"本端域"参数，即为当前系统域名，如"HADOOP.COM"。   | admintest@HADOOP.COM                                                          |
      | keytab文件      | 集群已启用Kerberos认证（安全模式）时填写此参数。 连接metastore用户名的keytab凭据文件，固定名称。在本地选择[2]获取的"user.keytab"文件。                                                                                                                                                                                                                                                                                                   | user.keytab                                                                   |
         
      
   
   4. （可选）修改自定义配置（MRS 3.3.0-LTS及之后版本）。
      - 单击"增加"，参考[表3]增加自定义配置参数。
         表3自定义配置 
        | 参数                                | 描述                                                                                                                                                                                                                                                                                                                                                                                           | 取值样例  |
        |:---|:---|:---|
        | hive.parquet.use-column-names     | 是否按照列名方式访问PARQUET存储文件： - true：是  - false（默认值）：否                                                                                                                                                             | false |
        | hive.hdfs.wire-encryption.enabled | 若对接数据源上HDFS的"hadoop.rpc.protection"参数值为"authentication"或"integrity"时，需添加此参数，并设置值为false。                                                                                                                                                                                                                                                                                                      | false |
        | hive.ignore-absent-partitions     | 查询是否忽略分区下是否有文件丢失。 - true：允许查询分区下存在文件丢失的情况。  - false：不允许查询分区下存在文件丢失的情况，会直接报错（手动对接数据源时，不填则默认为该值）。                                                                                                     | true  |
        | hudi.has.operation.field          | 是否支持开启写入Changlog消息的Hudi MOR表。 - true：支持开启写入Changlog消息。  - false：不支持开启写入Changlog消息。   对应的session参数名称为infer_operation_field。 若Hudi集群为MRS3.6.0-LTS版本及之后的版本，该配置会自动计算，无需显式配置。 | true  |
           
        
      
      
      
      - 单击"删除"，可以删除已增加的自定义配置参数。
       
   
   5. 单击"确定"。
   
   
   
   
8. 登录集群客户端所在节点，执行以下命令，切换到客户端安装目录，例如安装目录为"/opt/client"，具体以实际替换。 
   ```
   cd /opt/client
   ```
   执行以下命令配置环境变量。
   ```
   source bigdata_env
   ```
   执行以下命令进行用户认证。（集群未启用Kerberos认证（普通模式）时跳过此步骤）
   ```
   kinit HetuEngine组件操作用户
   ```
   
   
9. 执行以下命令，登录数据源的Catalog。 
   ```
   hetu-cli --catalog 数据源名称 --schema 数据库名
   ```
   例如执行以下命令：
   ```
   hetu-cli --catalog hudi --schema default
   ```
   
   
10. 执行以下命令，可正常查看数据库表信息或不报错即表示连接成功。 
    ```
    show tables;
    ```
    
    
 
#### Hudi数据类型映射
目前Hudi数据源支持的数据类型为：INT、BIGINT、FLOAT、DOUBLE、DECIMAL、STRING、DATE、TIMESTAMP、BOOLEAN、BINARY、MAP、STRUCT、ARRAY。
#### 性能优化
- 元数据缓存 Hudi连接器支持元数据缓存，以便更快地提供对各种操作的元数据请求。可参考[调整HetuEngine元数据缓存](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1746.html)。
  
- 动态过滤 开启动态过滤有助于Hudi连接器的Join算子的计算优化。可参考[调整HetuEngine动态过滤](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24564.html)。
  
- 带分区条件查询 建立分区表并且查询带分区过滤条件有助于过滤部分分区数据，从而提高性能。
  
 
#### 添加Hudi数据源约束
Hudi数据源只支持查询操作，DDL、Insert、Update和Delete等操作均不支持，如需进行此类操作，请参考[使用Hudi](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24025.html)章节。
