J'ai créé une instance de bloc-notes Amazon SageMaker. J'ai ensuite connecté un cluster Apache Spark Amazon EMR à l'aide d'Apache Livy. Je vois des bases de données et des tables dans le catalogue de données AWS Glue. Toutefois, lorsque j'essaie d'interroger les données, je reçois un message d'erreur semblable à ce qui suit :

An error occurred while calling o647.showString. : java.lang.AssertionError: assertion failed: No plan for HiveTableRelation 'mydatabase'.'cloudfront_logs', org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe

Dans les versions 5.10.0 à 5.17.0 d'Amazon EMR, HiveContext n'est pas activé par défaut lorsque vous utilisez Livy. Activez HiveContext dans Livy pour résoudre cette erreur.

Vous pouvez activer HiveContext dans Livy sur un cluster existant ou lors du lancement d'un nouveau cluster. Pour un cluster existant :

1.    Connectez-vous au nœud maître à l'aide de SSH. Par exemple :

ssh -i ~/mykeypair.pem hadoop@master-public-DNS

2.    Atteignez le répertoire du fichier livy.conf :

cd /etc/livy/conf/

3.    Sauvegardez le fichier livy.conf :

sudo cp livy.conf livy.bk

4.    Ouvrez le fichier livy.conf dans l'éditeur de texte de votre choix. Par exemple :

sudo vim livy.conf

5.    Ajoutez la ligne suivante à livy.conf, puis enregistrez le fichier :

livy.repl.enable-hive-context true

6.    Exécutez les commandes suivantes pour redémarrer livy-server :

sudo stop livy-server
sudo start livy-server

Pour un nouveau cluster :

Utilisez l'objet de configuration suivant pour activer HiveContext pour livy-conf lors du lancement d'un nouveau cluster :

[
  {
    "Classification": "livy-conf",
    "Properties": {
      "livy.repl.enable-hive-context": "true"
    }
  }
]

Testez la fonctionnalité de requête PySpark dans votre bloc-notes Amazon SageMaker

1.    Créez un contexte Spark dans votre bloc-notes :

sc

2.    Importez HiveContext, puis affichez un aperçu de la table. Par exemple :

from pyspark.sql import HiveContext
hive_context = HiveContext(sc)
cl_logs = hive_context.table("mydatabase.cloudfront_logs")
cl_logs.show()

3.    Exécutez une requête simple pour vous assurer que l'erreur java.lang.AssertionError est résolue. Par exemple :

result = hive_context.sql('SELECT * FROM mydatabase.cloudfront_logs WHERE method="GET" AND status=200 LIMIT 5')
result.show()

Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support

Date de publication : 12/02/2019