您配置 Hive 仓库连接器 (HWC) 的方式会影响查询授权过程和您的安全性。有多种方法可以通过 HWC 访问 Hive,并不是所有操作都通过 HiveServer (HS2)。一些操作,例如 Spark Direct Reader 和 Hive Streaming,通过 HMS 直接进入 Hive,其中通常适用基于存储的权限。
HWC授权
作为客户端用户,您必须在使用 HWC 之前使用 kerberos 登录。您需要适当的存储权限才能写入目标分区或表位置。您需要配置 HWC 读取选项。您需要配置 HWC 读取选项。HWC 读取配置选项如下表所示:
能力 | JDBC方式 | Spark Direct Reader模式 |
---|---|---|
Ranger 与细粒度访问控制的集成 | ✓ | 不适用 |
Hive ACID 读取 | ✓ | ✓ |
处理的工作负载 | 非生产的工作负载、小数据集 | 生产工作负载,没有细粒度访问控制的 ETL |
这些读取配置选项需要连接到不同的 Hive 组件:
- Direct Reader 配置:连接到 Hive Metastore (HMS)
- JDBC 配置:连接到 HiveServer (HS2) 或 HiveServer Interactive (HSI)
Ranger 授权通过 HiveServer (HS2) 或 Hive Metastore API (HMS API) 从 Spark 访问 Hive 表。
要将 ACID 托管表从 Spark 写入 Hive,您必须使用 HWC。要将外部表从 Spark 写入 Hive,您可以使用原生 Spark 或 HWC。
下图展示了典型的读授权流程:
下图展示了典型的写授权流程:
写入时,HWC 始终通过 HiveServer (HS2) 强制执行授权。在 JDBC 模式下读取托管表会强制实施 Ranger 授权,包括细粒度功能,例如字段映射。在 Direct Reader 模式下,Ranger 和 HMS 的集成来提供授权。
外部表查询通过 HMS API,它也与 Ranger 集成。如果您不使用 HWC,则与 Ranger 集成的 Hive 元存储 (HMS) API 会授权外部表访问。在这种情况下,HMS API-Ranger 集成会强制执行 Ranger Hive ACL。使用 HWC 时,诸如 DROP TABLE 之类的查询会影响文件系统数据以及 HMS 中的元数据。
使用 Direct Reader 选项,SparkSQL 查询直接从 HMS 读取托管表元数据,但前提是您有权访问文件系统上的文件。您不能使用 Direct Reader 选项写入托管表。
托管表授权
Spark 作业在尝试访问 Apache Hive 托管表时模拟最终用户。作为最终用户,您无权访问 Hive 仓库中的托管文件。托管表具有不允许最终用户访问的默认文件系统权限,包括 Spark 用户访问。
作为管理员,当您为 JDBC 读取配置 HWC 时,您可以在 Ranger 中设置访问托管表的权限。您可以微调 Ranger 以保护特定数据。例如,您可以屏蔽某些列中的数据,或设置基于标签的访问控制。
当您为 Direct Reader 模式配置 HWC 时,您不能以这种方式使用 Ranger。您必须为托管表设置对文件系统位置的读取访问权限。您必须对 Hive 仓库位置 ( hive.metastore.warehouse.dir)具有读取和执行权限。
外表授权
支持外部表读写的 Ranger 授权。您需要在 Cloudera Manager 中配置一些属性来授权外部表写入。您必须被授予对外部表文件的文件系统权限,以允许 Spark 直接访问实际表数据,而不仅仅是表元数据。
Direct Reader授权限制
由于 Spark 允许用户运行任意代码,因此 Spark 本身无法实现 Ranger 细粒度访问控制,例如行级过滤或列级屏蔽。此限制扩展到使用 Direct Reader 读取数据。
要在细粒度级别限制数据访问,请使用支持 Ranger 的读取选项。如果不需要细粒度访问,请仅考虑使用 Direct Reader 选项从 Spark 读取 Hive 数据。例如,将 Direct Reader 用于 ETL 用例。
授权外部表
作为管理员,您需要了解如何授权用户对Apache Hive 外部表进行读写,包括使用Spark SQL、Hue 和Beeline 访问表。您还需要为用户配置表的文件级权限。
您为 HMS API-Ranger 集成设置以下属性和值:
代码语言:javascript复制hive.metastore.pre.event.listeners
值:
代码语言:javascript复制org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizer
配置 HMS 写入。
代码语言:javascript复制hive.security.authenticator.manager
值:
代码语言:javascript复制org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
使用 Cloudera Manager 安全阀将属性添加到hive-site.xml。
配置步骤
- 在 Cloudera Manager 中,要配置 Hive Metastore 属性,请单击Clusters > Hive-1 > Configuration。
- 搜索Hive-site。
- 在hive-site.xml 的Hive Metastore 服务器高级配置片段(安全阀)中,单击 。
- 添加属性名称和值。
- 重复步骤以添加其他属性。
- 保存更改。
- 为用户配置表的文件级权限。
只有对外部表具有文件级权限的用户才能访问外部表。
配置 HMS 属性以进行授权
作为管理员,如果您对查询授权有任何问题,您可能需要通过 Ranger 设置 Apache Hive Metastore (HMS) 授权。比如你配置了Hive查询的基于存储的授权,然后想切换到Ranger授权,就必须设置Ranger授权。您可以配置 HMS 属性以进行此切换。
要集成 HMS API 和 Ranger 以授权查询,您需要使用 Cloudera Manager 将以下 HMS 属性和值添加到 hive-site.xml:
代码语言:javascript复制hive.metastore.pre.event.listeners
值:
代码语言:javascript复制org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizer
配置 HMS 写入。
代码语言:javascript复制hive.security.authenticator.manager
值:
代码语言:javascript复制org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
使用 Cloudera Manager 安全阀将属性添加到 hive-site.xml。
配置步骤
- 在 Cloudera Manager 中,要配置 Hive Metastore 属性,请单击Clusters > Hive-1 > Configuration。
- 搜索Hive-site。
- 在hive-site.xml 的Hive Metastore 服务器高级配置片段(安全阀)中,单击 。
- 添加属性名称和值。
- 重复步骤以添加其他属性。
- 保存更改。
配置 HMS 属性以进行授权
作为管理员,如果您对查询授权有任何问题,您可能需要通过 Ranger 设置 Apache Hive Metastore (HMS) 授权。比如你配置了Hive查询的基于存储的授权,然后想切换到Ranger授权,就必须设置Ranger授权。您可以配置 HMS 属性以进行此切换。
要集成 HMS API 和 Ranger 以授权查询,您需要使用 Cloudera Manager 将以下 HMS 属性和值添加到 hive-site.xml:
代码语言:javascript复制hive.metastore.pre.event.listeners
价值:
代码语言:javascript复制org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizer
配置 HMS 写入。
代码语言:javascript复制hive.security.authenticator.manager
值:
代码语言:javascript复制org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
使用 Cloudera Manager 安全阀将属性添加到 hive-site.xml,如下一节所述。
- 在 Cloudera Manager 中,要配置 Hive Metastore 属性,请单击Clusters > Hive-1 > Configuration。
- 搜索hive-site。
- 在hive-site.xml 的Hive Metastore 服务器高级配置片段(安全阀)中,单击 。
- 添加属性名称和值。
- 重复步骤以添加其他属性。
- 保存更改。
原文链接:https://docs.cloudera.com/cdp-private-cloud-base/latest/hive-metastore/topics/hive_apache_spark_hive_connection_configuration.html