Makina Blog

Le blog Makina-corpus

Récupérer des données Hadoop avec Python


Accéder à des données situées sur un cluster Hadoop peut se faire de différentes manières en Python. Voyons ensemble quelques approches courantes.

Accéder à HDFS

Dans un cluster Hadoop, les données sont stockées sur un système de fichier distribué appellé HDFS. L'utilitaire standard pour accéder à ces données en ligne de commande est un programme nommé tout simplement `hdfs`. Voici par exemple comment lister un répertoire avec cet outil:

$ hdfs dfs -ls 'hdfs://mon-cluster/user/cloudera/'

Mais cet outil est écrit en Java, ce qui présente deux inconvénients :

  • Il faut qu'une JVM soit installée sur le poste du développeur, ce qui n'est pas nécessairement le cas pour un développeur Python.
  • Le temps de démarrage d'une JVM peut-être assez long, ce qui peut être génant pour un outil en ligne de commande

Pour éviter ces inconvénients, on peut utiliser snakebite, un client HDFS écrit en Python. On l'installe comme n'importe quel package Python :

$ pip install snakebite

On pourra alors lister un répertoire comme ceci :

$ snakebite -n mon-cluster ls /user/cloudera

Snakebite peut aussi s'utiliser en tant que bibliothèque Python :

>>> from snakebite.client import Client
>>> client = Client("mon-cluster", 8020, use_trash=False)
>>> for x in client.ls(["/user/cloudera"]):
...     print(x)
...

Une alternative à cela est de mettre en place le service WebHDFS qui fournit une API REST au dessus de HDFS. Dans ce cas, on accède aux données avec une bibliothèque HTTP classique telle que urllib.request ou bien Requests.

Hive

Hive permet d'accéder aux données du cluster avec une interface de type SQL. Les développeurs Python peuvent utiliser PyHive pour requêter Hive depuis leur langage favori. Ce paquet s'installe avec pip :

$ pip install pyhive

PyHive nous fournit alors une interface conforme à la DB-API, c'est à dire la même API qui sert à accéder à des bases de données relationnelles telles que PostgreSQL ou SQLite.

from pyhive import hive

connection = hive.connect("quickstart.cloudera", username="cloudera",
                          port=10000)
cursor = connection.cursor()
query = "SELECT * FROM my_data WHERE some_field='some value'"
cursor.execute(query)
for row in cursor.fetchall():
    print(row[0], row[1])


Données Avro

Le format Avro est un format de stockage populaire dans le monde Hadoop, notamment pour stocker des séries temporelles. Le package fastavro permet de lire ce format très simplement. Après l'avoir installé avec pip, on peut écrire du code ressemblant à ceci:

import fastavro as avro

with open('my-data-file.avro', 'rb') as fp:
    reader = avro.reader(fp)
    schema = reader.schema

    for record in reader:
        process_record(record)

En conclusion

Comme nous l'avons vu, accéder à des données stockées sur un cluster Hadoop est très facilement réalisable en Python. Pour en apprendre davantage sur l'intégration de Python avec Hadoop on pourra consulter le guide gratuit publié par O'Reilly : Hadoop with Python. Pour expérimenter avec Hadoop, Cloudera fournit une image Docker qui permet de démarrer un cluster Hadoop de test assez facilement.

Actualités en lien

Image
Encart PyConFr 2024
21/10/2024

Makina Corpus est spon­sor de la PyConFR 2024

Le soutien de Makina Corpus à la PyConFR 2024, qui se tient du 31 octobre au 3 novembre 2024 à Stras­bourg, reflète ses valeurs de partage et d’in­no­va­tion, et son enga­­ge­­ment envers la commu­nauté dyna­­mique et ouverte de Python.

Voir l'article
Image
Webinaire découverte de Canari
10/04/2024

Revoir les webi­naires : décou­verte de l’ou­til CANARI-France

L’ap­pli­ca­tion CANARI-France est destiné aux acteurs agri­coles afin de calcu­ler des indi­ca­teurs agro-clima­tiques à partir de projec­tions clima­tiques. Décou­vrer en le replay des 4 webi­naires orga­ni­sés par Sola­gro et l’ADEME.

Voir l'article
Image
Python
26/07/2023

La formation Python éligible au CPF est enfin arrivée

Makina Corpus propose un nouvelle formation Python éligible au CPF. Grâce à cette certification, cette formation peut être entièrement financée par votre compte Compte Personnel de Formation.

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus