Catalogue Spark avec AWS Glue : base de données introuvable

J'ai créé un cluster EMR avec le catalogue Glue Data. Lorsque j'invoque le spark-shell, je peux répertorier avec succès les tables stockées dans une base de données Glue via

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

Cependant, lorsque je soumets un travail via spark-submit, j'obtiens une erreur fatale

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

Je crée ma SparkSession dans le travail soumis via spark-submitvia

SparkSession.builder.enableHiveSupport.getOrCreate


Solution du problème

L'ajout de la hive.metastore.client.factory.classconfiguration au code initiant la session spark a résolu le problème pour moi :

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

c'est la même configuration définie dans aws docs ( https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-glue.html ) et ajoutée à la configuration du cluster lors de la vérification Use for Hive table metadatade la création du cluster, mais pour certains la raison ne fonctionne pas comme prévu (j'utilise emr 5.12.0).

Commentaires