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

AWS Glue 4.0作业加载Trino Spark连接器失败求助

AWS Glue 4.0 集成Trino Spark连接器时出现CatalogNotFoundException问题

在AWS Glue 4.0作业中尝试使用Trino Spark连接器,遇到加载失败问题,报错找不到Catalog插件类。

Glue作业提交脚本相关代码

trino_drivers_list = list_s3_files(s3_bucket, "bd_cap/trino-drivers/", s3_client)
trino_drivers = ",".join(trino_drivers_list)

spark_configurations = [
   f"spark.sql.extensions=io.trino.spark.TrinoSQLExtension",
    f"spark.sql.catalog.trino=io.trino.spark.TrinoCatalog",
    f'spark.sql.defaultCatalog=mytrinocatalog',
    f"spark.sql.catalog.mytrinocatalog.type=hive",
    f"spark.logConf=true",
    f"spark.driver.log.level=DEBUG",
    f"spark.executor.log.level=DEBUG",
    f"spark.driver.logClassPath=true",
    f"spark.executor.logClassPath=true"
]

spark_string = ' --conf '.join(spark_configurations)

job_args = {
    'Description': description,
    'Role': 'AWSGlueServiceRole',
    'ExecutionProperty': {
        "MaxConcurrentRuns": 3
    },
    'Command': {
        "Name": "glueetl",
        "ScriptLocation": script_path,
        "PythonVersion": "3"
    },
    'GlueVersion': '4.0',
    'WorkerType': 'Standard',
    'NumberOfWorkers': 1,
    'DefaultArguments': {
        "--extra-py-files": ",".join(extra_py_files),
        "--additional-python-modules": python_modules,
        "--jars": trino_drivers,
        "--conf": spark_string
    }
}

期望Glue运行的脚本相关代码

trino_drivers = [
    "s3://my_s3bucket/bd_cap/trino-drivers/guava-30.1-jre.jar",
    "s3://my_s3bucket/bd_cap/trino-drivers/jackson-annotations-2.12.3.jar",
    "s3://my_s3bucket/bd_cap/trino-drivers/jackson-core-2.12.3.jar",
    "s3://my_s3bucket/bd_cap/trino-drivers/jackson-databind-2.12.3.jar",
    "s3://my_s3bucket/bd_cap/trino-drivers/log-0.197.jar",
    "s3://my_s3bucket/bd_cap/trino-drivers/slf4j-api-1.7.30.jar",
    "s3://my_s3bucket/bd_cap/trino-drivers/slf4j-nop-1.7.30.jar",
    "s3://my_s3bucket/bd_cap/trino-drivers/trino-jdbc-469.jar"
]

spark = SparkSession.builder \
    .appName("Trino Writer") \
    .config("spark.sql.catalog.trino", "org.apache.spark.sql.trino.TrinoCatalog") \
    .config("spark.sql.catalog.trino.uri", trino_url) \
    .config("spark.sql.catalog.trino.user", trino_user) \
    .config("spark.sql.catalog.trino.password", trino_password) \
    .config("spark.jars", ",".join(trino_drivers)) \
    .getOrCreate()

错误信息

py4j.protocol.Py4JJavaError: An error occurred while calling o1904.cache.
: org.apache.spark.sql.connector.catalog.CatalogNotFoundException: Catalog 'mytrinocatalog' plugin class not found: spark.sql.catalog.mytrinocatalog is not defined
    at org.apache.spark.sql.errors.QueryExecutionErrors$.catalogPluginClassNotFoundError(QueryExecutionErrors.scala:1608)

已尝试的排查步骤

  • 将所需Trino jar包上传至S3存储桶,包括trino-jdbc-469.jar等文件;
  • 使用mvn dependency:tree检查依赖冲突,未发现问题;
  • 配置Glue作业通过spark.jars属性加载S3中的jar包;
  • 尝试使用--extra-jars选项和spark.jars.packages属性加载连接器;
  • 通过spark.sparkContext._jvm.ClassLoader.getSystemResources("")验证jar包已加载;
  • 尝试设置spark.driver.extraClassPath和spark.executor.extraClassPath属性;
  • 尝试设置spark.executor.extraJavaOptions和spark.driver.extraJavaOptions属性;
  • 在主脚本中直接设置CLASSPATH环境变量。

解决方案

  1. 统一Catalog配置,消除冲突
    提交脚本中同时配置了trino和mytrinocatalog两个Catalog,且默认Catalog设为mytrinocatalog但未定义其实现类,这是核心问题。修改提交脚本的spark_configurations:

    spark_configurations = [
        f"spark.sql.extensions=io.trino.spark.TrinoSQLExtension",
        # 只配置一个Trino Catalog,命名为trino
        f"spark.sql.catalog.trino=io.trino.spark.TrinoCatalog",
        f"spark.sql.catalog.trino.uri={trino_url}",
        f"spark.sql.catalog.trino.user={trino_user}",
        f"spark.sql.catalog.trino.password={trino_password}",
        # 若需要默认使用Trino Catalog,设置defaultCatalog为trino
        f'spark.sql.defaultCatalog=trino',
        f"spark.logConf=true",
        f"spark.driver.log.level=DEBUG",
        f"spark.executor.log.level=DEBUG",
        f"spark.driver.logClassPath=true",
        f"spark.executor.logClassPath=true"
    ]
    

    同时移除期望脚本中重复的SparkSession.builder代码——Glue作业的SparkSession由Glue初始化,自定义build会覆盖作业级配置,导致参数失效。

  2. 替换为正确的Trino Spark连接器Jar包
    当前使用的trino-jdbc-469.jar是JDBC驱动,而非Trino Spark连接器的Jar包。需要下载trino-spark-connector对应的Jar包(版本需匹配Trino集群和Glue 4.0对应的Spark 3.3版本),上传到S3后替换现有JDBC Jar。

  3. 规范Jar包加载方式
    在Glue作业的DefaultArguments中仅保留--jars参数指向正确的Trino Spark连接器及其依赖Jar,不要在脚本中设置spark.jars,避免重复加载引发冲突。

  4. 验证类加载状态
    在作业脚本中添加以下代码,确认Trino Catalog类是否成功加载:

    try:
        spark.sparkContext._jvm.io.trino.spark.TrinoCatalog
        print("TrinoCatalog class loaded successfully")
    except Exception as e:
        print(f"Failed to load TrinoCatalog: {str(e)}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:39:52