首页 文章

带有AWS Glue的Spark Catalog:未找到数据库

提问于
浏览
2

我用胶水数据目录创建了一个EMR集群 . 当我调用spark-shell时,我能够成功地列出存储在Glue数据库中的表

spark.catalog.setCurrentDatabase("test")
spark.catalog.listTables

但是,当我通过 spark-submit 提交作业时,我收到致命错误

ERROR ApplicationMaster: User class threw exception: org.apache.spark.sql.AnalysisException: Database 'test' does not exist.;

我正在通过 spark-submit via提交的作业中创建我的SparkSession

SparkSession.builder.enableHiveSupport.getOrCreate

4 回答

  • 0

    hive.metastore.client.factory.class 配置添加到启动spark会话的代码中为我解决了这个问题:

    SparkSession spark = SparkSession.builder()
    ...
                .config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory")
                .enableHiveSupport()
                .getOrCreate();
    

    这是在aws docs(https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html)中定义的相同配置,并在创建群集时检查 Use for Hive table metadata 时添加到群集配置中,但由于某种原因,dosn 't work as expected (I' m使用emr 5.12.0) .

  • 1

    我遇到了同样的问题: spark-submit 不会发现AWS Glue库,但是在主节点上工作的 spark-shell 会 .

    事实证明我的 spark-submit 作业使用了一个使用标准 org.apache.sparkorg.apache.hive 库编译的胖 .jar . 正在使用jar库而不是 EMR 上安装的自定义类 . 如果是这种情况,请务必排除所有:

    'org.apache.spark:''org.apache.hive:''org.apache.hadoop:'来自你的模块.jar

    这是我用于 .Gradle 的参考:http://unethicalblogger.com/2015/07/15/gradle-goodness-excluding-depends-from-shadow.html .

    在所有火花库前添加 compileOnly 关键字修复它 .

  • 3

    我们的问题是EMR集群的IAM权限;确保集群IAM实例配置文件具有对粘合的完全访问权限 .

  • 1

相关问题