Apache spark 带AWS胶水的Spark目录:未找到数据库

Apache spark 带AWS胶水的Spark目录:未找到数据库,apache-spark,amazon-emr,aws-glue,Apache Spark,Amazon Emr,Aws Glue,我用Glue数据目录创建了一个EMR集群。当我调用spark shell时,我能够通过 spark.catalog.setCurrentDatabase("test") spark.catalog.listTables 但是,当我通过spark submit提交作业时,会出现致命错误 ERROR ApplicationMaster: User class threw exception: org.apache.spark.sql.AnalysisException: Database 'tes

我用Glue数据目录创建了一个EMR集群。当我调用spark shell时,我能够通过

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

EMR 5.9.0刚刚发布-请试一试,它应该适合您

相关文件:


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

原来我的
spark submit
作业使用了一个fat
.jar
,它是用标准的
org.apache.spark
org.apache.hive
库编译的。jar库被用来代替安装在
EMR
上的自定义类。 如果是这种情况,请确保排除所有:

'org.apache.spark:' 'org.apache.hive:' 'org.apache.hadoop:'modules from you
.jar

这是我用于
.Gradle
的参考:


在所有spark库前面添加
compileOnly
关键字修复了它。

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

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文档()中定义的配置相同,并在创建集群时检查
使用配置单元表元数据时添加到集群配置中,但由于某些原因无法按预期工作(我使用的是emr 5.12.0)

对我来说也是一样,。你找到解决办法了吗??