Hadoop Streaming: Ecrire un programme Hadoop MapReduce en Python



Cet article de blog sur Hadoop Streaming est un guide étape par étape pour apprendre à écrire un programme Hadoop MapReduce en Python pour traiter d'énormes quantités de Big Data.

La quantité de données numériques générées chaque jour augmente de façon exponentielle avec l'avènement des médias numériques, de l'Internet des objets, entre autres développements. Ce scénario a donné lieu à des défis dans la création d'outils et de technologies de nouvelle génération pour stocker et manipuler ces données. C'est là qu'intervient Hadoop Streaming! Ci-dessous, un graphique qui illustre la croissance des données générées chaque année dans le monde à partir de 2013. IDC estime que la quantité de données créées annuellement atteindra 180 zettaoctets en 2025!

data-by-2025-hadoop-streaming





Source: IDC

qu'est-ce qu'un espace de noms c ++

IBM déclare que, chaque jour, près de 2,5 quintillions d’octets de données sont créés, 90% des données mondiales étant créées au cours des deux dernières années! C'est une tâche difficile de stocker une telle quantité de données. Hadoop peut gérer de gros volumes de données structurées et non structurées plus efficacement que l'entrepôt de données d'entreprise traditionnel. Il stocke ces énormes ensembles de données sur des grappes distribuées d'ordinateurs. Hadoop Streaming utilise le framework MapReduce qui peut être utilisé pour écrire des applications pour traiter d'énormes quantités de données.



Le framework MapReduce étant basé sur Java, vous vous demandez peut-être comment un développeur peut y travailler s'il n'a pas d'expérience en Java. Eh bien, les développeurs peuvent écrire une application de mappage / réducteur en utilisant leur langage préféré et sans avoir beaucoup de connaissances en Java, en utilisant Streaming Hadoop plutôt que de passer à de nouveaux outils ou technologies comme Pig and Hive.

Qu'est-ce que le streaming Hadoop?

Hadoop Streaming est un utilitaire fourni avec la distribution Hadoop. Il peut être utilisé pour exécuter des programmes d'analyse de Big Data. Le streaming Hadoop peut être effectué à l'aide de langages tels que Python, Java, PHP, Scala, Perl, UNIX et bien d'autres. L'utilitaire nous permet de créer et d'exécuter des tâches de mappage / réduction avec n'importe quel exécutable ou script comme mappeur et / ou réducteur. Par exemple:

$ HADOOP_HOME / bin / pot hadoop $ HADOOP_HOME / hadoop-streaming.jar



-input myInputDirs

-output myOutputDir

-dossier / bac / chat

-réducteur / poubelle / wc

Description des paramètres:

Code MapReduce Python:

mapper.py #! / usr / bin / python import sys #Word Count Example # l'entrée provient de l'entrée standard STDIN pour la ligne dans sys.stdin: line = line.strip () #remove premiers et derniers espaces blancs mots = line.split ( ) # divise la ligne en mots et retourne sous forme de liste pour mot en mots: #écrire les résultats sur la sortie standard STDOUT print '% s% s'% (mot, 1) #Emettre le mot

reducer.py

#! / usr / bin / python import sys depuis l'opérateur import itemgetter # en utilisant un dictionnaire pour mapper les mots à leurs nombres current_word = None current_count = 0 word = None # input provient de STDIN pour la ligne dans sys.stdin: line = line.strip () word, count = line.split ('', 1) try: count = int (count) except ValueError: continue if current_word == word: current_count + = count else: if current_word: print '% s% s'% (current_word, current_count) current_count = count current_word = word if current_word == mot: print '% s% s'% (current_word, current_count)

Courir:

  1. Créez un fichier avec le contenu suivant et nommez-le word.txt.

Chat souris lion cerf tigre lion éléphant lion

  1. Copiez les scripts mapper.py et reducer.py dans le même dossier où se trouve le fichier ci-dessus.

  1. Ouvrez le terminal et localisez le répertoire du fichier.Commande: ls: pour lister tous les fichiers dans le répertoire cd: pour changer de répertoire / dossier

  1. Voir le contenu du fichier.
    Commande: chat nom de fichier

> contenu de mapper.py

commande: cat mapper.py

> Contenu de reducer.py

commande: chat reducer.py

Nous pouvons exécuter mapper et reducer sur des fichiers locaux (ex: word.txt). Afin d'exécuter la carte et de réduire le système de fichiers distribués Hadoop (HDFS), nous avons besoin du Pot de streaming Hadoop. Donc, avant d’exécuter les scripts sur HDFS, exécutons-les localement pour nous assurer qu’ils fonctionnent correctement.

> Exécutez le mappeur

commander: chat word.txt | python mapper.py

> Exécutez reducer.py

commander: chat word.txt | python mapper.py | sort -k1,1 | python reducer.py

différence entre mutable et immuable

Nous pouvons voir que le mappeur et le réducteur fonctionnent comme prévu, nous ne serons donc pas confrontés à d'autres problèmes.

Exécuter le Code Python sur Hadoop

Avant d'exécuter la tâche MapReduce sur Hadoop, copiez les données locales (word.txt) vers HDFS

> exemple: hdfs dfs -put répertoire_source répertoire_destination_hadoop

commander: hdfs dfs -put /home/edureka/MapReduce/word.txt / utilisateur / edureka

Copiez le chemin du fichier jar

Le chemin du fichier jar Hadoop Streaming basé sur la version du fichier jar est:

/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar

Localisez donc le fichier JAR Hadoop Streaming sur votre terminal et copiez le chemin.

commander:

ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

Exécutez le travail MapReduce

commander:

hadoop jar /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -file /home/edureka/mapper.py -mapper mapper.py -file / home / edureka / reducer.py -reducer reducer.py -input / user / edureka / word -output / user / edureka / Wordcount

Hadoop fournit une interface Web de base pour les statistiques et les informations. Lorsque le cluster Hadoop est en cours d'exécution, ouvrez http: // localhost: 50070 dans le navigateur. Voici la capture d'écran de l'interface Web Hadoop.

Parcourez maintenant le système de fichiers et localisez le fichier wordcount généré pour voir la sortie. Ci-dessous la capture d'écran.

Nous pouvons voir la sortie sur le terminal en utilisant cette commande

commander: hadoop fs -cat / utilisateur / edureka / Wordcount / part-00000

comment convertir une date de chaîne en date en java

Vous avez maintenant appris à exécuter un programme MapReduce écrit en Python à l'aide de Hadoop Streaming!

Edureka a un cours en direct et dirigé par un instructeur sur le Big Data et Hadoop, co-créé par des praticiens de l'industrie.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous recontacterons.