aut*_*con 2 amazon-emr apache-spark aws-glue
Ive使用Glue Data目录创建了一个EMR集群。调用spark-shell时,我可以通过以下方式成功列出存储在Glue数据库中的表:
spark.catalog.setCurrentDatabase("test")
spark.catalog.listTables
Run Code Online (Sandbox Code Playgroud)
但是,当我通过提交工作时spark-submit出现致命错误
ERROR ApplicationMaster: User class threw exception: org.apache.spark.sql.AnalysisException: Database 'test' does not exist.;
Run Code Online (Sandbox Code Playgroud)
我创建工作中我SparkSession通过提交spark-submit经
SparkSession.builder.enableHiveSupport.getOrCreate
Run Code Online (Sandbox Code Playgroud)
小智 7
将hive.metastore.client.factory.class配置添加到启动spark会话的代码中为我解决了这个问题:
SparkSession spark = SparkSession.builder()
...
.config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory")
.enableHiveSupport()
.getOrCreate();
Run Code Online (Sandbox Code Playgroud)
这与AWS文档(https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html)中定义的配置相同,并在检查Use for Hive table metadata集群创建时添加到集群配置中,但对于某些配置原因不能按预期工作(我使用的是emr 5.12.0)。
小智 5
我遇到了同样的问题:spark-submit不会发现 AWS Glue 库,但spark-shell在主节点上工作会发现。
事实证明,我的工作使用的是用标准和库编译的spark-submitfat 。使用 jar 库代替安装在. 如果您遇到这种情况,请确保排除所有:.jarorg.apache.sparkorg.apache.hiveEMR
'org.apache.spark:' 'org.apache.hive:' 'org.apache.hadoop:' 来自您的模块
.jar
这是我使用的参考.Gradle:http://unethicalblogger.com/2015/07/15/gradle-goodness-exclusion-depends-from-shadow.html。
compileOnly在所有 Spark 库前面添加关键字修复了它。
Al *_*sky -2
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
| 归档时间: |
|
| 查看次数: |
5207 次 |
| 最近记录: |