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

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"