集成Ranger插件的EMR中Spark使用Glue Catalog问题咨询
问题解答
关于Ranger插件与Glue Catalog选项的兼容性
配置Ranger插件的EMR集群时,无法启用“使用AWS Glue Data Catalog作为Spark的外部Hive元存储”选项。原因是Ranger Spark插件依赖EMR内置的Hive Metastore实现权限拦截,若启用Glue作为外部元存储会替换掉内置Hive Metastore,导致Ranger无法正常管控Spark的元数据请求。即使创建集群时手动勾选该选项,实际也不会生效。
让Spark检索Glue Catalog的解决方案
要在保留Ranger权限控制的前提下让Spark访问Glue Catalog,需手动配置双Catalog模式,步骤如下:
1. 修改Spark配置文件
编辑集群的spark-defaults.conf,添加以下配置项,将Glue Catalog注册为Spark的额外catalog:
spark.sql.catalog.glue_catalog=org.apache.spark.sql.hive.HiveCatalog spark.sql.catalog.glue_catalog.spark.sql.hive.metastore.version=3.1.2 spark.sql.catalog.glue_catalog.spark.sql.hive.metastore.jars=builtin spark.sql.catalog.glue_catalog.spark.sql.hive.metastore.sharedPrefixes=com.amazonaws,org.apache.hadoop spark.sql.catalog.glue_catalog.spark.hadoop.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
2. 配置Ranger权限规则
登录Ranger Admin控制台,找到对应Spark服务的策略,添加针对Glue Catalog的权限规则:
- 针对数据库:资源类型选
database,资源路径填glue_catalog.*,为目标用户/组授予SELECT权限 - 针对表:资源类型选
table,资源路径填glue_catalog.*.*,授予相应的查询/修改权限
3. 在Spark中访问Glue Catalog
- 临时访问:在Spark SQL中指定catalog查询,示例命令:
SHOW DATABASES IN glue_catalog; USE glue_catalog.your_database; SHOW TABLES; - 设置默认catalog:若希望默认访问Glue Catalog,在
spark-defaults.conf中添加:
之后执行spark.sql.defaultCatalog=glue_catalogshow databases会直接返回Glue中的数据库列表。
注意事项
- 确保EMR集群的IAM角色拥有Glue Data Catalog的访问权限,需包含
glue:GetDatabase、glue:GetTable等核心操作权限 - 修改配置后需重启Spark相关服务(如Spark Thrift Server、Livy),确保配置生效
内容的提问来源于stack exchange,提问作者spaaaaark
相关产品推荐
相关产品推荐

