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

cdmah0mi  于 2023-03-23  发布在  Apache
关注(0)|答案(6)|浏览(137)

我用Glue数据目录创建了一个EMR集群。

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提交的作业中创建SparkSession

SparkSession.builder.enableHiveSupport.getOrCreate
t3psigkw

t3psigkw1#

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

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时添加到集群配置中,但由于某些原因,无法按预期工作(我使用emr 5.12.0)。

iq3niunx

iq3niunx2#

我也有同样的问题:spark-submit不会发现AWS Glue库,但在主节点上运行的spark-shell会发现。
原来我的spark-submit作业使用了一个fat .jar,它是用标准的org.apache.sparkorg.apache.hive库编译的。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 .
在所有spark库前面添加compileOnly关键字修复了它。

cxfofazt

cxfofazt3#

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

3qpi33ja

3qpi33ja4#

我的问题最终是另一个分类配置一直在干扰spark-hive-site的一个。我删除了所有其他的,它终于能够连接。

mo49yndu

mo49yndu5#

你是否在Glue作业中选中了“Use Glue data catalog as the Hive metastore”选项?这是最基本的,否则Spark不会看到Glue catalog,而只会看到Glue创建的“默认”数据库。

相关问题