
# 配置HetuEngine对接LakeFormation数据连接
配置LakeFormation数据连接操作及配置MRS集群组件的存算分离后，才可以正常使用HetuEngine对接LakeFormation统一的数据湖元数据及权限管理。
#### 前提条件
- 本章节内容仅适用于MRS 3.6.0及之后版本。
- LakeFormation实例运行正常，数据库、数据表、数据权限等页面加载正常。
- 集群关闭Kerberos认证（普通模式），且运行正常，包含HetuEngine、Guardian、Ranger、Hive等服务。

- 已完成MRS集群对接LakeFormation，并配置MRS集群Hive组件的存算分离，详情可参考[创建集群时配置LakeFormation数据连接](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300727.html#mrs_01_300727)或[为已有集群配置LakeFormation数据连接](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300728.html#mrs_01_300728)。
- 已创建HetuEngine管理员用户，创建用户可参考[创建HetuEngine权限角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1714.html)。
- 已创建HetuEngine计算实例，可参考[创建HetuEngine计算实例](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1731.html)。
 
#### HetuEngine创建Hive数据源对接LakeFormation步骤
1. 获取Hive数据源集群的"hive-site.xml"、"hdfs-site.xml"和"core-site.xml"配置文件。
   
   1. 登录Hive数据源所在集群的Manager页面。 登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
      
   
   2. 在"主页"右上方单击"下载客户端"，根据界面提示下载"完整客户端"文件到本地。
   
   3. 将下载的客户端文件压缩包解压，获取如下文件：
      - hive-site.xml：FusionInsight_Cluster_*集群ID*_Services_ClientConfig/Hive/config
      
      - core-site.xml：FusionInsight_Cluster_*集群ID*_Services_ClientConfig/HDFS/config
      
      - hdfs-site.xml：FusionInsight_Cluster_*集群ID*_Services_ClientConfig/HDFS/config
       
   
   
   
   
2. 获取服务端Principal并修改"core-site.xml"文件。
   
   1. 将"hive-site.xml"文件中的以下配置项和对应的值复制到"core-site.xml"中：
      ```
      <property>
      <name>lakeformation.project.id</name>
      <value>********</value>
      </property>
      <property>
      <name>lakeformation.instance.id</name>
      <value>********</value>
      </property>
      <property>
      <name>lakeformation.end.tenant.agency.name</name>
      <value>*********</value>
      </property>
      <property>
      <name>lakeformation.vpcep.ip</name>
      <value>https://********</value>
      </property>
      ```
      
   
   2. 在"core-site.xml"文件中修改或添加"hive.metastore.warehouse.dir"配置项，值填写为LakeFormation配置中default数据库的路径，即[配置LakeFormation实例](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300726.html#mrs_01_300726__zh-cn_topic_0000002368493490_section785954117267)章节获取的Hive数据目录下default数据库存储路径在OBS中的存储路径，例如"obs://lakeformation-test/hive/default"。
      ```
      <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>obs://lakeformation-test/hive/default</value>
      </property>
      ```
      
   
   
   
   
3. 使用HetuEngine管理员用户登录Manager，选择"集群 \> 服务 \> HetuEngine"，进入HetuEngine服务页面。
4. 在概览页签下的"基本信息"区域，单击"HSConsole WebUI"后的链接，进入HSConsole界面。
5. 选择"数据源"，单击"添加数据源"。在"添加数据源"页面填写参数。 
   1. 配置"基本配置"，填写数据源名称，选择数据源类型"Hive"。
   
   2. 配置"Hive配置"，参数配置请参考[表1]。
       表1Hive配置 
      | 参数          | 描述                                                                                                                                  | 取值样例 |
      |:---|:---|:---|
      | hdfs-site文件 | 在本地选择[步骤 1]获取的"hdfs-site.xml"配置文件，文件名固定。    | -    |
      | core-site文件 | 在本地选择[步骤 2]修改后的"core-site.xml"配置文件，文件名固定。 | -    |
      | yarn-site文件 | 无需添加。                                                                                                                               | -    |
         
      
   
   3. 配置"Metastore配置"，参数配置请参考[表2]。
       表2Metastore配置 
      | 参数            | 描述                                                                           | 取值样例                  |
      |:---|:---|:---|
      | Metastore URL | 数据源的Metastore的URL。对接LakeFormation场景时，固定写"thrift://127.0.0.1:80"即可，该配置不起实际作用。 | thrift://127.0.0.1:80 |
         
      
   
   4. 连接池配置。 不支持开启连接池，"是否开启连接池"选择"否"。
      
   
   5. 自定义配置。
      单击"增加"，配置LakeFormation数据源自定义参数。
      表3对接LakeFormation自定义参数 
      | 参数                                     | 描述                                    | 取值            |
      |:---|:---|:---|
      | hive.lakeformation.authentication.type | 对接LakeFormation的认证方式。仅支持"GUARDIAN"方式。 | GUARDIAN      |
      | hive.metastore                         | MetaStore类型。                          | lakeformation |
      | hive.security                          | SQL鉴权方式。仅支持"lakeformation"方式。         | lakeformation |
         
      
   
   6. 单击"确定"。
   
   
   
   
6. 普通集群对接LakeFormation时，使用LakeFormation鉴权前，需要参考以下操作启用HetuEngine的Ranger鉴权。 
   1. 登录MRS Manager，选择"集群 \> 服务 \> HetuEngine"。
   
   2. 在右上角选择"更多 \> 启用Ranger鉴权"根据界面提示进行启用。
   
   3. 启用完成后单击"实例"页签，重启HSBroker实例更新配置。
   
   4. 登录HSConsole页面重启所有计算实例。
   
   
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   HetuEngine在第一次使用LakeFormation鉴权前必须启用一次Ranger鉴权，启用之后，后续停用Ranger鉴权也不会影响LakeFormation鉴权。
   
   
7. 登录集群客户端所在节点，执行以下命令，切换到客户端安装目录。 
   **cd /opt/client**
   **source bigdata_env**
   
   
8. 执行以下命令，登录数据源的catalog。 
   **hetu-cli --catalog** *数据源名称* **--schema** *数据库名* **--tenant** *租户名称* **--user** *待鉴权的HetuEngine用户*
   例如执行以下命令：
   **hetu-cli --catalog** **lakeformation_lf** **--schema default** **--tenant default** **--user hetutest**
   
   
9. 执行以下命令，可正常查看新增数据源即表示连接成功。 
   **show catalogs;**
   
   
 
#### HetuEngine创建Hudi数据源对接LakeFormation步骤
1. 获取Hive数据源集群的"hive-site.xml"、"hdfs-site.xml"和"core-site.xml"配置文件。
   
   1. 登录Hive数据源所在集群的Manager页面。 登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
      
   
   2. 在"主页"右上方单击"下载客户端"，根据界面提示下载"完整客户端"文件到本地。
   
   3. 将下载的客户端文件压缩包解压，获取如下文件：
      - hive-site.xml：FusionInsight_Cluster_*集群ID*_Services_ClientConfig/Hive/config
      
      - core-site.xml：FusionInsight_Cluster_*集群ID*_Services_ClientConfig/HDFS/config
      
      - hdfs-site.xml：FusionInsight_Cluster_*集群ID*_Services_ClientConfig/HDFS/config
       
   
   
   
   
2. 获取服务端Principal并修改"core-site.xml"文件。
   
   1. 将"hive-site.xml"文件中的以下配置项和对应的值复制到"core-site.xml"中：
      ```
      <property>
      <name>lakeformation.project.id</name>
      <value>********</value>
      </property>
      <property>
      <name>lakeformation.instance.id</name>
      <value>********</value>
      </property>
      <property>
      <name>lakeformation.end.tenant.agency.name</name>
      <value>*********</value>
      </property>
      <property>
      <name>lakeformation.vpcep.ip</name>
      <value>https://********</value>
      </property>
      ```
      
   
   2. 在"core-site.xml"文件中修改或添加"hive.metastore.warehouse.dir"配置项，值填写为LakeFormation配置中default数据库的路径，即[配置LakeFormation实例](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300726.html#mrs_01_300726__zh-cn_topic_0000002368493490_section785954117267)章节获取的Hive数据目录下default数据库存储路径在OBS中的存储路径，例如"obs://lakeformation-test/hive/default"。
      ```
      <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>obs://lakeformation-test/hive/default</value>
      </property>
      ```
      
   
   
   
   
3. 使用HetuEngine管理员用户登录Manager，选择"集群 \> 服务 \> HetuEngine"，进入HetuEngine服务页面。
4. 在概览页签下的"基本信息"区域，单击"HSConsole WebUI"后的链接，进入HSConsole界面。
5. 选择"数据源"，单击"添加数据源"。在"添加数据源"页面填写参数。 
   1. 配置"基本配置"，填写数据源名称，选择数据源类型"Hudi"。
   
   2. 配置"Hudi配置"，参数配置请参考[表4](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300413.html#mrs_01_300413__zh-cn_topic_0000002430520721_zh-cn_topic_0000002358771574_table289674817185)。
      表4Hudi配置 
      | 参数          | 描述                                                                                                                                   | 取值样例 |
      |:---|:---|:---|
      | hdfs-site文件 | 在本地选择[步骤 1]获取的"hdfs-site.xml"配置文件，文件名固定。 | -    |
      | core-site文件 | 在本地选择[步骤 2]修改后的"core-site.xml"配置文件，文件名固定。 | -    |
      | yarn-site文件 | 无需添加。                                                                                                                                | -    |
         
      
   
   3. 配置"Metastore配置"，参数配置请参考[表5]。
       表5Metastore配置 
      | 参数            | 描述                                                                           | 取值样例                  |
      |:---|:---|:---|
      | Metastore URL | 数据源的Metastore的URL。对接LakeFormation场景时，固定写"thrift://127.0.0.1:80"即可，该配置不起实际作用。 | thrift://127.0.0.1:80 |
         
      
   
   4. 自定义配置。
      单击"增加"，配置LakeFormation数据源自定义参数。
      表6对接LakeFormation自定义参数 
      | 参数                                     | 描述                                    | 取值            |
      |:---|:---|:---|
      | hive.lakeformation.authentication.type | 对接LakeFormation的认证方式。仅支持"GUARDIAN"方式。 | GUARDIAN      |
      | hive.metastore                         | MetaStore类型。                          | lakeformation |
      | hive.security                          | 鉴权类型，此处配置等同于安全集群下打开数据源鉴权。             | lakeformation |
         
      
   
   5. 单击"确定"。
   
   
   
   
6. 普通集群对接LakeFormation时，使用LakeFormation鉴权前，需要参考以下操作启用HetuEngine的Ranger鉴权。 
   1. 登录MRS Manager，选择"集群 \> 服务 \> HetuEngine"。
   
   2. 在右上角选择"更多 \> 启用Ranger鉴权"根据界面提示进行启用。
   
   3. 启用完成后单击"实例"页签，重启HSBroker实例更新配置。
   
   4. 登录HSConsole页面重启所有计算实例。
   
   
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   HetuEngine在第一次使用LakeFormation鉴权前必须启用一次Ranger鉴权，启用之后，后续停用Ranger鉴权也不会影响LakeFormation鉴权。
   
   
7. 登录集群客户端所在节点，执行以下命令，切换到客户端安装目录。 
   **cd /opt/client**
   **source bigdata_env**
   
   
8. 执行以下命令，登录数据源的catalog。 
   **hetu-cli --catalog** *数据源名称* **--schema** *数据库名* **--tenant** *租户名称* **--user** *待鉴权的HetuEngine用户*
   例如执行以下命令：
   **hetu-cli --catalog** **lakeformation_lf** **--schema default** **--tenant default** **--user hetutest**
   
   
9. 执行以下命令，可正常查看新增数据源即表示连接成功。 
   **show catalogs;**
   
   
 
#### 为HetuEngine配置LakeFormation授权管理
LakeFormation鉴权场景包括SQL鉴权（引擎侧鉴权）和接口鉴权（调用元数据时LakeFormation鉴权）。接口鉴权请参考[创建具有访问LakeFormation权限的委托](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300726.html#mrs_01_300726__zh-cn_topic_0000002368493490_section1036142515166)赋权，确保委托用户LakeFormation具备接口操作权限。
本章节重点讲解SQL鉴权。MRS集群对接LakeFormation后，LakeFormation服务中的相关数据湖权限策略及角色信息会自动同步至MRS Ranger，对于MRS集群内的用户， 可通过关联至对应Ranger角色后获取对应资源的访问权限。
当已完成HetuEngine对接LakeFormation数据连接后，需为HetuEngine组件配置相关访问权限。
1. 在LakeFormation中添加鉴权角色。 
   1. 登录[LakeFormation管理控制台](https://console.huaweicloud.com/lake-formation/)。
   
   2. 在LakeFormation管理面上，进入"数据权限 \> 角色"页面，单击"创建角色"，"角色名称"填写"hetu_test"，单击"确定"。
   
   
   
   
2. 在Ranger为待鉴权用户添加角色，将HetuEngine内置用户设置为Admin。 
   1. 使用**admin**登录Ranger管理页面。
   
   2. 单击"Settings"，在"Users"页签的"Users"用户列表中，单击HetuEngine内置用户"hetuserver/hadoop.*xxxx*"，将"Select Role"设置为"Admin"，单击"Save"。
   
   3. 在"Roles"页签，单击在LakeFormation创建的角色名，如"hetu_test"，在"Users"项的"Select User"框中选择待鉴权的HetuEngine用户，例如hetutest，然后单击"Add Users"，单击"Save"。
   
   
   
   
3. （如果HetuEngine服务启用了Ranger鉴权，则执行此步骤，否则跳过）在Ranger页面为对接LakeFormation的HetuEngine数据源Catalog配置基础权限策略， 
   1. 在Ranger管理页面首页中单击"TRINO"区域的"HetuEngine"。
   
   2. 在"Access"页签单击"Add New Policy"，添加HetuEngine权限控制策略。
   
   3. 参考如下设置HetuEngine权限控制策略。
      - 在"Policy Name"填写策略名称。
      
      - 在"Presto Catalog"填写要授权的资源所在的catalog，如"lakeformation_lf"。
      
      - 在"Select User"中填写授权的HetuEngine用户名称，例如hetutest。
      
      - 在"Permissions"中勾选"Select"。
       
   
   
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   此策略为基础策略，在配置其他LakeFormation策略前必须先确保配置了此策略。
   
   
4. 在Ranger页面为对接LakeFormation的HetuEngine数据源Catalog赋予权限。 
   1. 在Ranger管理页面首页中单击"TRINO"区域的"HetuEngine"。
   
   2. 在"Access"页签单击"Add New Policy"，添加HetuEngine权限控制策略。
   
   3. 参考如下设置HetuEngine权限控制策略。
      - catalog：填写对接LakeFormation的HetuEngine数据源名称，例如"lakeformation_lf"。
      
      - schema、table、column：填写"\*"。
      
      - Select User：选择授权的HetuEngine用户名称，例如hetutest。
      
      - Permissions：选择"All"。
       
   
   4. 单击"Save"保存策略。
      ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
      Ranger鉴权和LakeFormation鉴权取交集，即需要同时满足Ranger权限和LakeFormation权限才可以鉴权通过，Ranger鉴权配置请参考[HetuEngine基于Ranger权限管控](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1722.html#section1)。
      
   
   
   
   
5. 在LakeFormation对角色进行授权。 
   进入LakeFormation的"数据授权"页面，单击"授权"，编辑如下，将访问表所需的权限赋予"hetu_test"，单击"确定"。
   - 主体类型：选择"角色"。
   
   - 选择角色：下拉框选择刚创建的角色"hetu_test"。
   
   - 授权类型：选择"资源"。
   
   - Catalog：选择"hive"。
   
   - 数据库、表、列等：参考[表7]，根据SQL语法鉴权的对象进行选择和配置。
   
   - 权限：参考[表7]。
   
   
    表7HetuEngine语法与权限对应关系 
   | HetuEngine语法                                                                                                                             || SQL鉴权所需LakeFormation权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   |:---|---|:---|
   | schema                                                                                                  | create schema                   | Catalog：CREATE_DATABASE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | schema                                                                                                  | show schemas                    | Catalog：LIST_DATABASE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | schema                                                                                                  | show create schema              | 数据库：DESCRIBE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | schema                                                                                                  | drop schema                     | - 数据库：DROP  - 表：DROP                                  |
   | schema                                                                                                  | alter schema set location/owner | 数据库：ALTER                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | schema                                                                                                  | desc schema                     | Catalog：LIST_DATABASE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | table                                                                                                   | create table                    | 数据库：CREATE_TABLE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | table                                                                                                   | create table as select          | - 数据库：CREATE_TABLE  - 源表：SELECT（或列:SELECT）   |
   | table                                                                                                   | show create table               | 表：DESCRIBE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | table                                                                                                   | select from table               | 表：SELECT（或列：SELECT）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | table                                                                                                   | insert into table               | - 表：INSERT  - 表：SELECT（或列：SELECT）             |
   | table                                                                                                   | alter table                     | 表：ALTER                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | table                                                                                                   | alter table drop partition      | - 表：DELETE  - 表：SELECT                            |
   | table                                                                                                   | delete from table               | - 表：DELETE  - 表：SELECT（如带WHERE条件）               |
   | table                                                                                                   | show tables                     | 数据库：LIST_TABLE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | table                                                                                                   | drop table                      | 表：DROP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | table                                                                                                   | show partitions                 | 表：SELECT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | table                                                                                                   | truncate table                  | 表：DELETE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | table                                                                                                   | desc table                      | 表：DESCRIBE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | table                                                                                                   | comment                         | 表：ALTER                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | view                                                                                                    | create view                     | - 数据库：CREATE_TABLE  - 源表：SELECT（或列：SELECT）                |
   | view                                                                                                    | drop view                       | 表：DROP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | view                                                                                                    | alter view                      | 表：ALTER (视图)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | view                                                                                                    | select from view                | 表：SELECT（视图和源表）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | view                                                                                                    | show views                      | 数据库：LIST_TABLE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | view                                                                                                    | show create view                | 表：DESCRIBE (视图)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | column                                                                                                  | show columns                    | 表：DESCRIBE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | column                                                                                                  | select \[column\] from table    | 表：SELECT（或列：SELECT）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | stats  | show stats                      | 表：SELECT（或列：SELECT）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | stats  | analyze                         | - 表：INSERT  - 表：SELECT（或列：SELECT）                       |
      
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 由于使用角色进行鉴权，表创建者具有所创建的表的所有权限。
   
   - LakeFormation属于数据源鉴权，无法对HetuEngine引擎所有操作进行控制，如set session、reset session等操作。未在[表7]表中列出的语法均视为无控制，若需要对这些操作进行权限控制，请参考[HetuEngine基于Ranger权限管控](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1722.html#section1)。
   
   - explain、explain analyze、call等操作本身无权限控制，但子语句涉及权限控制，则权限与子语句权限控制相同，参考[表7]，根据SQL语法鉴权的对象进行选择和配置。
   
   - 普通模式集群创建的数据库不支持通过**alter database set owner**语句修改数据库owner。
    
   
   
 
