Vous êtes sur la page 1sur 3

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

Par Alex Marandon — publié 02/05/2017

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.

Menu
Plan du site
Equipe
Mentions legales
Se connecter

Contact
+33 (0)9 70 33 21 50
contact@makina-corpus.com makina-corpus.com

Société
Nantes
Toulouse
Belgique
Suivez-nous