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

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

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

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables