我用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
6条答案
按热度按时间t3psigkw1#
在启动spark会话的代码中添加
hive.metastore.client.factory.class
配置为我解决了这个问题:这与aws docs(https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html)中定义的配置相同,并在集群创建时检查
Use for Hive table metadata
时添加到集群配置中,但由于某些原因,无法按预期工作(我使用emr 5.12.0)。iq3niunx2#
我也有同样的问题:
spark-submit
不会发现AWS Glue库,但在主节点上运行的spark-shell
会发现。原来我的
spark-submit
作业使用了一个fat.jar
,它是用标准的org.apache.spark
和org.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
关键字修复了它。cxfofazt3#
我们的问题是EMR集群上的IAM权限;确保集群IAM示例配置文件对glue具有完全访问权限。
3qpi33ja4#
我的问题最终是另一个分类配置一直在干扰
spark-hive-site
的一个。我删除了所有其他的,它终于能够连接。mo49yndu5#
你是否在Glue作业中选中了“Use Glue data catalog as the Hive metastore”选项?这是最基本的,否则Spark不会看到Glue catalog,而只会看到Glue创建的“默认”数据库。
vaj7vani6#
EMR 5.9.0刚刚发布-请给予一试,它应该适合你。
相关文件:
http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html
http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html