Aller au contenu

Introduction à Presto et à Hive dans AWS

29 septembre 2023

Omotayo Akinbode

Dans le présent guide, je vais vous expliquer les bases de Hive et de Presto. Je vais d’abord comparer les deux outils en analysant leurs avantages respectifs et les cas dans lesquels ils peuvent être utilisés,  puis nous verrons un exemple combinant les deux. Allons-y!

Qu’est-ce qu’Apache Hive?

Apache Hive est un outil d’entreposage de données basé sur Apache Hadoop qui sert à exécuter des requêtes et des analyses à partir de jeux de données de grande taille. Dans Hive, les requêtes de données reposent sur une méthode semblable à celle de SQL, ce qui facilite l’exploration et l’analyse de mégadonnées.

La première version de Hive servait principalement à utiliser les données d’un HDFS, mais le stockage des analyses de données et la manière dont on y accède ont changé depuis. Aujourd’hui, Hive est un outil de choix qui permet de construire des structures externes de bases de données pour faire des requêtes d’objets à partir de plateformes de stockage telles qu’Amazon S3.

Qu’est-ce que Presto?

Presto est un moteur de requêtes SQL distribué qui permet d’exécuter des requêtes analytiques sur différentes sources de données, notamment Hadoop, S3, MySQL, Teradata et d’autres bases de données relationnelles et non relationnelles.

Presto a été développé par Facebook pour exécuter des requêtes vers plusieurs plateformes de stockage de données avec un temps de réponse allant de moins d’une seconde à plusieurs minutes. D’autres entreprises utilisent ce moteur de requêtes, par exemple Netflix, Airbnb et Dropbox.

Presto est particulièrement intéressant pour sa capacité à exécuter des requêtes en parallèle. C’est d’ailleurs parce qu’il permet d’envoyer plusieurs requêtes en même temps qu’il est devenu l’outil de référence en informatique décisionnelle.

Amazon Athena est un service fonctionnant sur le principe de Presto, mais piloté par AWS.  En outre, Presto peut être déployé dans l’environnement Amazon EMR.

 

 

Presto vs Hive

  • Presto s’utilise généralement pour effectuer des analyses de données rapides qui ne nécessitent que peu de mémoire.
  • C’est un outil conçu pour offrir une latence faible, tandis que Hive s’utilise plutôt pour des requêtes qui demandent, à l’inverse, beaucoup de mémoire.
  • Il est également possible de combiner les deux pour explorer les données associées à un système Hadoop.
  • Apache Hive repose sur un langage semblable à SQL, mais certaines requêtes en informatique décisionnelle appellent tout de même des connaissances propres à la plateforme.

Utiliser Hive et Presto

Presto n’est pas originalement conçu pour être compatible avec le système de fichiers HDFS. Pour travailler avec ce type de système, il faut faire appel à d’autres outils, comme le connecteur Hive (HCatalog).

Presto est également intéressant pour sa compatibilité avec les schémas en étoile.

L’exemple ci-dessous permet de comprendre comment utiliser Hive et Presto en travaillant avec des partitions de tableaux Parquet en NoSQL.

Remarque : Vous pouvez utiliser Presto pour générer des requêtes-rapports depuis des bases de données plates ou des modèles dimensionnels. Cependant, si Presto exécute une requête depuis un modèle dimensionnel, ou si vous souhaitez agglomérer vos jeux de données, prêtez attention à la configuration de Presto et à la taille des tableaux que vous voulez joindre pour une performance optimale.

Quand Presto n’est pas configuré de manière adéquate, les utilisateurs rencontrent souvent des problèmes de fuite de mémoire et de mauvaise performance. Il est donc judicieux de consulter la documentation : https://teradata.github.io/presto/docs/141t/admin/tuning.html.

Exemple d’utilisation de Hive et de Presto

 

  • Imaginons que nous voulons créer une vue reposant sur une table de faits (données Parquet) et sur plusieurs petits tableaux dimensionnels.
  • La logique voudrait qu’on utilise Presto, mais explorer les tableaux Parquet directement dans Presto est impossible.
  • Nous aurons donc besoin d’autres outils, comme Hive, pour créer des tableaux externes.
  • En combinant ces deux outils, nous pouvons lire les données de l’autre système de fichiers avec Presto.

Dans cet exemple, nous travaillons avec trois tableaux dimensionnels stockés dans une base de données clé-valeur, ainsi qu’avec une table de faits Parquet partitionnée. 

Créer la table de faits partitionnée avec Spark

data = [(1,1001,'SMALL8','','USD', 10,2020,9),(2,1002,'MED9','','CAD', 17,2019,10),(3,1003,'LARGE10','','CAD',90,2019,10)] columns = ['uid','productid','sizeid','description','currency','quantity','year','month'] df = spark.createDataFrame(data, columns)

Écrire les données Parquet avec Spark

data_location="C://fact_partition" df.write.format("parquet").mode("overwrite").option("key", "uid")\ .partitionBy('year','month').save(data_location)

* Remarque : Lorsque vous travaillez avec des partitions de tableaux Parquet, les champs de partition doivent être remplis en minuscule, sans quoi vous ne pourrez pas créer de tableau externe dans Hive.

Configurer Hive

Pour configurer Hive dans AWS, vous pouvez directement déployer Hive sur votre plateforme Amazon EMR.


Cliquez sur ce lien pour consulter les instructions : https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive.html

 

Champs additionnels

D’autres champs peuvent être ajoutés à votre tableau lors de la création du tableau externe. Hive permet d’ajouter des champs qui ne sont pas disponibles dans un tableau Parquet.

Maintenant que notre tableau externe est créé, nous pouvons accéder aux données dans Presto.

Il est également possible de configurer Presto sur Amazon EMR. Cliquez sur ce lien pour consulter les instructions : https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto.html

Tableau dans Hive, données de Presto

Ci-dessous, la vue qui joint les données de la table de faits et la base de données clé-valeur.

L’exemple présenté ici montre comment créer un tableau externe dans Hive et y joindre les données d’une base clé-valeur à l’aide de Presto.

VOUS AVEZ UN PROJET ?