You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Spark SQL对接Moto模拟的AWS Glue Catalog进行本地测试?

问题:Spark本地测试时无法使用Moto模拟的Glue Catalog

我正在使用Moto模拟AWS Glue进行Spark本地测试,已成功通过moto_server -p9999启动Moto并在Glue中创建数据库和表。但执行Spark SQL命令如ss.sql("SELECT * FROM db.table")时,似乎指向默认Spark catalog而非Moto模拟的Glue catalog。

以下是我的简化Spark Session配置:

implicit val ss: SparkSession = SparkSession
  .builder()
  .appName("test spark session")
  .master("local[*]")
  .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension")
  .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
  .config("spark.hadoop.glue.catalog.enabled", "true")
  .config("spark.hadoop.glue.catalog.catalog-endpoint", "http://localhost:9999")
  .config("spark.hadoop.glue.catalog.region", "us-west-1")
  .config("spark.hadoop.hive.metastore.client.factory.class",
          "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory")
  .enableHiveSupport()
  .getOrCreate()

我的glueClient配置为使用Moto进行本地测试:

val glueClient: AWSGlue = {
  AWSGlueClientBuilder.standard().withEndpointConfiguration(
    new AwsClientBuilder.EndpointConfiguration(
      "http://localhost:9999",
      "us-west-1")
    ).withCredentials(
      new AWSStaticCredentialsProvider(
        new BasicAWSCredentials("accessKey", "secretKey")
      )
    ).build()
}

我能查看通过Moto创建的数据库和表,但Spark SQL查询无法识别它们。请问如何配置Spark以使用Moto Glue catalog,从而直接执行SHOW DATABASES或查询表?


解决方案

1. 替换默认Catalog实现

当前配置将spark.sql.catalog.spark_catalog设为DeltaCatalog,覆盖了默认的Glue Catalog绑定。需改为Glue对应的Catalog类:

.config("spark.sql.catalog.spark_catalog", "com.amazonaws.glue.catalog.spark.GlueCatalog")

修改后Spark的默认catalog会直接指向Moto模拟的Glue实例。

2. 补充Glue必要配置项

添加缺失的AWS凭证和SSL禁用配置,确保Spark能正确访问本地Moto服务:

// 配置AWS凭证,与glueClient保持一致
.config("spark.hadoop.aws.accessKeyId", "accessKey")
.config("spark.hadoop.aws.secretAccessKey", "secretKey")
// 本地Moto无需SSL,禁用避免连接失败
.config("spark.hadoop.glue.catalog.ssl.enabled", "false")

3. 调整Delta Lake配置(可选)

若保留Delta Lake功能,建议不替换默认catalog,而是新增独立的Delta catalog,避免与Glue Catalog冲突:

// 移除原DeltaCatalog替换默认的配置,新增独立的delta_catalog
.config("spark.sql.catalog.delta_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")

4. 验证连接有效性

启动Spark Session后,执行以下命令确认是否成功连接到Moto Glue:

ss.sql("SHOW DATABASES").show()

若仍无法识别库表,需检查Moto服务是否正常运行、端口9999是否可访问,同时确认Glue客户端创建的资源确实存在于Moto实例中。


内容的提问来源于stack exchange,提问作者Praveen Bhansali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:58:17