基于AWS Glue Data Catalog的EMR环境,dbt-spark配置方案咨询
dbt-spark 结合 AWS Glue Data Catalog 配置方案
完全可以实现dbt-spark对接AWS Glue Data Catalog,核心思路是利用EMR集群本身已配置的Glue元数据集成,dbt只需通过Thrift连接EMR的HiveServer2即可,不需要单独配置Glue的SDK或API。以下是具体配置步骤和注意事项:
1. 确认EMR集群的Glue元数据配置
EMR 5.10及以上版本原生支持Glue Data Catalog作为Hive/Spark的元数据存储,确保你的集群启动时已启用该配置:
- 集群启动时的配置分类中,Hive需设置:
hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory - Spark需设置:
spark.sql.catalogImplementation=hive - 验证:在EMR主节点执行
spark-sql或hive命令,运行show databases;,能看到Glue控制台中创建的数据库即说明配置生效。
2. dbt项目配置(profiles.yml)
dbt-spark的Thrift连接直接指向EMR的HiveServer2,而HiveServer2已经关联Glue元数据,所以配置只需聚焦于Spark连接参数:
your_dbt_profile: target: dev outputs: dev: type: spark method: thrift host: <EMR主节点公网DNS> port: 10000 schema: <Glue中要操作的数据库名> username: hadoop # EMR默认SSH用户名 password: "" connect_timeout: 60 use_ssl: false auth: LDAP # 若集群启用Kerberos则改为KERBEROS # 必须添加Delta Lake支持配置 spark_config: spark.sql.extensions: io.delta.sql.DeltaSparkSessionExtension spark.sql.catalog.spark_catalog: org.apache.spark.sql.delta.catalog.DeltaCatalog
3. 关键注意事项
- 网络访问:运行dbt的机器需能访问EMR主节点的10000端口,可通过安全组开放该端口,或本地使用SSH隧道转发:
转发后dbt配置中的ssh -i <你的密钥对.pem> -L 10000:localhost:10000 hadoop@<EMR主节点公网DNS>host设为localhost即可。 - 权限配置:EMR集群的IAM角色需具备Glue数据目录的读写权限(如
GlueDataFullAccess),以及Delta表所在S3路径的读写权限。 - Delta Lake支持:必须在
spark_config中添加Delta的扩展配置,否则dbt无法识别和处理Delta表。 - 连接测试:执行
dbt debug命令验证配置,成功时会显示连接到Spark,并能读取Glue中的数据库和表。
4. 生产环境优化
- 若使用Kerberos认证,需在profiles.yml中补充:
auth: KERBEROS kerberos_service_name: hive - 建议将dbt部署在AWS内部资源(如EC2)上,通过VPC内网访问EMR,避免公网传输风险。
内容的提问来源于stack exchange,提问作者Silva_PT_SCP
相关产品推荐
相关产品推荐

