Hadoop-Einführung und MapReduce mit Python

Hadoop Ein Tutorial für diejenigen, die anfangen möchten, aber es satt haben, in Java zu schreiben.

Da Hadoop in Java geschrieben ist, ist Mapper / Reducer grundsätzlich auch in Java geschrieben. Hadoop verfügt jedoch über eine Funktion namens Hadoop Streaming, mit der Daten über die Standard-Unix-Ein- / Ausgabe übertragen werden können. .. Ich habe Mapper / Reducer in Python damit geschrieben. Wenn Sie Hadoop Streaming verwenden, können Sie natürlich auch in anderen Sprachen als Python schreiben.

Dieses Mal habe ich eine pseudoverteilte Umgebung unter Ubuntu erstellt.

Ubuntu12.04 + Haadoop2.4.1

Hadoop Umweltbau

Installieren Sie, wenn Sie kein Java haben

$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk

Laden Sie Hadoop herunter

$ wget http://mirror.nexcess.net/apache/hadoop/common/hadoop-2.4.1/hadoop-2.4.1.tar.gz
$ tar zxvf hadoop-2.4.1.tar.gz
$ mv hadoop-2.4.1.tar.gz hadoop
$ rm hadoop-2.4.1.tar.gz
$ sudo mv hadoop /usr/local
$ cd /usr/local/hadoop
$ export PATH=$PATH:/usr/local/hadoop/bin #.Es ist gut, es in zshrc zu schreiben

Bearbeiten Sie die folgenden 4 Dateien

$ vim etc/hadoop/core-site.xml

core-site.xml


...
<configuration>
     <property>
         <name>fs.default.name</name>
         <value>hdfs://localhost:9000</value>
     </property>
</configuration>
$ vim etc/hadoop/hdfs-site.xml

hdfs-site.xml


...
<configuration>
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property>
</configuration>
$ mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
$ vim etc/hadoop/mapred-site.xml

mapred-site.xml


...
<configuration>
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property>
</configuration>
$ vim etc/hadoop/hadoop-env.xml

hadoop-env.xml


...
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
...

Hinzufügen, wenn Sie den Schlüssel nicht haben

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Initialisieren Sie abschließend den Namensknoten und starten Sie Hadoop

$ hdfs namenode -format
$ sbin/start-dfs.sh

Schreiben von Mapper / Reducer in Python

Schreiben Sie dieses Mal WordCount, einen Beispielcode für Hadoop in Python.

Bereiten Sie zuerst die Eingabedatei vor

$ mkdir inputs
$ echo "a b b c c c" > inputs/input.txt

Mapper

$ vim mapper.py

mapper.py


#!/usr/bin/env python

import sys

for l in sys.stdin:
    for word in l.strip().split(): print '{0}\t1'.format(word)

Mapper gibt ungefähr Folgendes aus

a    1
b    1
b    1
c    1
c    1
c    1

Reducer

$ vim reducer.py

reducer.py


#!/usr/bin/env python

from collections import defaultdict
from operator import itemgetter
import sys

wordcount_dict = defaultdict(int)

for l in sys.stdin:
    word, count = line.strip().split('\t')
    wordcount_dict[word] += int(count)

for word, count in sorted(wordcount_dict.items(), key=itemgetter(0)):
    print '{0}\t{1}'.format(word, count)

Der Reduzierer zählt jedes von Mapper ausgegebene Wort und gibt etwa Folgendes aus

a    1
b    2
c    3

Ausführung durch Hadoop Streaming

Führen Sie abschließend den obigen Mapper / Reducer auf Hadoop aus

Zuerst. Laden Sie die JAR-Datei für Hadoop Streaming herunter

$ wget http://repo1.maven.org/maven2/org/apache/hadoop/hadoop-streaming/2.4.1/hadoop-streaming-2.4.1.jar

Erstellen Sie ein Verzeichnis in HDFS und legen Sie die Eingabedatei darauf ab (Achten Sie darauf, lokale Dateien und HDFS-Dateien nicht durcheinander zu bringen.)

$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/vagrant
$ hdfs dfs -put inputs/input.txt /user/vagrant

Bei der Ausführung wird das Ergebnis im angegebenen Ausgabeverzeichnis gespeichert

$ hadoop jar hadoop-streaming-2.4.1.jar -mapper mapper.py -reducer reducer.py -input /user/vagrant/input.txt -output outputs
$ hdfs dfs -cat /user/vagrant/outputs/part-00000
a    1
b    2
c    3


Recommended Posts

Hadoop-Einführung und MapReduce mit Python
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Python und Hardware-Verwenden von RS232C mit Python-
Python mit Pyenv und Venv
Funktioniert mit Python und R.
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
[Einführung in Python3 Tag 1] Programmierung und Python
Scraping mit Node, Ruby und Python
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
JSON-Codierung und -Decodierung mit Python
[GUI in Python] PyQt5-Drag & Drop-
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
Lesen und Schreiben von CSV mit Python
Mehrfachintegration mit Python und Sympy
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Datenpipeline-Aufbau mit Python und Luigi
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
Überwachen Sie Mojo-Ausfälle mit Python und Skype
[Automatisierung] Bearbeiten Sie Maus und Tastatur mit Python
Passwortlose Authentifizierung mit RDS und IAM (Python)
Python-Installation und Paketverwaltung mit pip
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
POST verschieden mit Python und empfange mit Flask
Bilder mit Pupil, Python und OpenCV aufnehmen
Fraktal zum Erstellen und Spielen mit Python
Ein Memo mit Python2.7 und Python3 in CentOS
Einfache Einführung der Spracherkennung mit Python
[Einführung in Python] Verwenden wir foreach mit Python
Verwenden Sie PIL oder Pillow mit Cygwin Python
Erstellen und entschlüsseln Sie Caesar-Code mit Python
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Lesen und Schreiben von JSON-Dateien mit Python
Umgang mit "Jahren und Monaten" in Python
Ich habe Numba mit Python3.5 installiert und verwendet
Tweet-Analyse mit Python, Mecab und CaboCha
Verknüpfung von Python und JavaScript mit dem Jupiter-Notizbuch
Verkehrsüberwachung mit Kibana, ElasticSearch und Python
FM-Modulation und Demodulation mit Python Part 2
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Laden Sie einfach mp3 / mp4 mit Python und youtube-dl herunter!
Betreiben Sie Haushaltsgeräte mit Python und IRKit
Bereinigen Sie die Python-Umgebung mit Pythonz und virtualenv
Üben des Web-Scrapings mit Python und Selen
Einfache Einführung in die Python3-Serie und OpenCV3
Einfaches Web-Scraping mit Python und Ruby
Importieren und Exportieren von GeoTiff-Bildern mit Python
Ich verwende Tox und Python 3.3 mit Travis-CI