Ausführen von MapReduce-Beispielen in HDInsight

Hier erfahren Sie, wie Sie die MapReduce-Beispiele ausführen, die in Apache Hadoop in HDInsight enthalten sind.

Voraussetzungen

Die MapReduce-Beispiele

Die Beispiele befinden sich im HDInsight-Cluster unter /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar. Quellcode für diese Beispiele befindet sich im HDInsight-Cluster unter /usr/hdp/current/hadoop-client/src/hadoop-mapreduce-project/hadoop-mapreduce-examples.

Die folgenden Beispiele sind in diesem Archiv enthalten:

Beispiel BESCHREIBUNG
aggregatewordcount Zählt die Wörter in den Eingabedateien.
aggregatewordhist Berechnet das Histogramm der Wörter in den Eingabedateien.
bbp Verwendet Bailey-Borwein-Plouffe, um genaue Stellen von Pi zu berechnen.
dbcount Zählt die in einer Datenbank gespeicherten Seitenabrufe.
distbbp Verwendet eine BBP-Formel, um genaue Bits von Pi zu berechnen.
grep Zählt die Übereinstimmungen mit einem RegEx in der Eingabe.
join Führt eine Verknüpfung von sortierten, gleichmäßig partitionierten Datasets durch.
multifilewc Zählt Wörter aus verschiedenen Dateien.
pentomino Programm für die Ablage von Teilen, um Lösungen für Pentomino-Probleme zu finden.
pi Schätzt Pi mit einer Monte-Carlo-ähnlichen Methode.
randomtextwriter Schreibt 10 GB zufällige Textdaten pro Knoten.
randomwriter Schreibt 10 GB zufällige Daten pro Knoten.
secondarysort Definiert eine sekundäre Reduce-Phase-Sortierung.
sort Sortiert die vom Zufallswriter geschriebenen Daten.
sudoku Ein Programm zum Lösen von Sudokus
teragen Generiert Daten für „terasort“.
terasort Führt „terasort“ aus.
teravalidate Überprüft die Ergebnisse von „terasort“.
wordcount Zählt die Wörter in den Eingabedateien.
wordmean Zählt die durchschnittliche Länge der Wörter in den Eingabedateien.
wordmedian Zählt die mittlere Länge der Wörter in den Eingabedateien.
wordstandarddeviation Zählt die Standardabweichung der Länge der Wörter in den Eingabedateien.

Ausführen des wordcount-Beispiels

  1. Stellen Sie per SSH eine Verbindung mit HDInsight her. Ersetzen Sie CLUSTER durch den Namen Ihres Clusters, und geben Sie dann den folgenden Befehl ein:

    ssh sshuser@CLUSTER-ssh.azurehdinsight.net
    
  2. Verwenden Sie in der SSH-Sitzung den folgenden Befehl, um die Beispiele aufzulisten:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar
    

    Dieser Befehl generiert die Liste der Beispiele aus dem vorherigen Abschnitt dieses Dokuments.

  3. Verwenden Sie den folgenden Befehl, um Hilfe zu einem bestimmten Beispiel zu erhalten. In diesem Fall das Beispiel wordcount :

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount
    

    Sie erhalten folgende Meldung:

    Usage: wordcount <in> [<in>...] <out>
    

    Diese Meldung bedeutet, dass Sie mehrere Eingabepfade für die Quelldokumente angeben können. Im endgültigen Pfad wird die Ausgabe (Anzahl der Wörter in den Quelldokumenten) gespeichert.

  4. Verwenden Sie den folgenden Code, um alle Wörter in den Notizbüchern von Leonardo da Vinci zu zählen, die als Beispieldaten in Ihrem Cluster bereitgestellt sind:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount /example/data/gutenberg/davinci.txt /example/data/davinciwordcount
    

    Eingabe für diesen Auftrag wird aus /example/data/gutenberg/davinci.txt gelesen. Ausgabe für dieses Beispiel wird in /example/data/davinciwordcount gespeichert. Beide Pfade befinden sich in Standardspeicher für den Cluster, nicht im lokalen Dateisystem.

    Hinweis

    Wie in der Hilfe für das wordcount-Beispiel erwähnt, können Sie auch mehrere Eingabedateien angeben. Beispiel: Mit hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount /example/data/gutenberg/davinci.txt /example/data/gutenberg/ulysses.txt /example/data/twowordcount werden die Wörter in "davinci.txt" und "ulysses.txt" gezählt.

  5. Sobald der Auftrag abgeschlossen ist, verwenden Sie den folgenden Befehl zum Anzeigen der Ausgabe.

    hdfs dfs -cat /example/data/davinciwordcount/*
    

    Dieser Befehl verkettet alle Ausgabedateien, die vom Auftrag erzeugt wurden. Er zeigt die Ausgabe an der Konsole an. Die Ausgabe sieht in etwa wie folgender Text aus:

    zum     1
    zur     1
    zwanzig 1
    zweite  1
    

    Jede Zeile steht für ein Wort und gibt an, wie oft es in den Eingabedaten aufgetreten ist.

Das Sudoku-Beispiel

Sudoku ist ein Logikrätsel, das sich aus neun 3 x 3-Quadraten zusammensetzt. Einige Zellen der Quadrate erhalten Zahlen, während andere leer sind, und das Ziel besteht darin, die leeren Zellen richtig zu füllen. Unter dem obigen Link finden Sie weitere Informationen zu dem Rätsel, aber der Zweck dieses Beispiels ist, die leeren Zellen richtig zu füllen. Unsere Eingabe sollte also eine Datei im folgenden Format sein:

  • Neun Zeilen mit neun Spalten
  • Jede Spalte kann eine Zahl oder ? (was eine leere Zelle angibt) enthalten
  • Zellen werden durch ein Leerzeichen voneinander getrennt

Sudoku-Rätsel müssen auf eine bestimmte Weise erstellt werden, da eine Zahl in einer Spalte oder Zeile nur einmal vorkommen darf. Es gibt ein Beispiel im HDInsight-Cluster, das entsprechend erstellt wurde. Es befindet sich unter /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta und enthält den folgenden Text:

8 5 ? 3 9 ? ? ? ?
? ? 2 ? ? ? ? ? ?
? ? 6 ? 1 ? ? ? 2
? ? 4 ? ? 3 ? 5 9
? ? 8 9 ? 1 4 ? ?
3 2 ? 4 ? ? 8 ? ?
9 ? ? ? 8 ? 5 ? ?
? ? ? ? ? ? 2 ? ?
? ? ? ? 4 5 ? 7 8

Führen Sie dieses Beispielproblem anhand des Sudoku-Beispiels mit dem folgenden Befehl aus:

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar sudoku /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta

Die Ergebnisse sollten in etwa folgendem Text entsprechen:

8 5 1 3 9 2 6 4 7
4 3 2 6 7 8 1 9 5
7 9 6 5 1 4 3 8 2
6 1 4 8 2 3 7 5 9
5 7 8 9 6 1 4 2 3
3 2 9 4 5 7 8 1 6
9 4 7 2 8 6 5 3 1
1 8 5 7 3 9 2 6 4
2 6 3 1 4 5 9 7 8

Beispiel für Pi (π)

Das Beispiel verwendet eine statistische (Quasi-Monte-Carlo-) Methode, um den Wert von Pi zu schätzen. Punkte werden nach dem Zufallsprinzip in einem Einheitenquadrat platziert. Das Quadrat enthält auch einen Kreis. Die Wahrscheinlichkeit, dass die Punkte innerhalb des Kreises liegen, entspricht der Fläche des Kreises, Pi/4. Der Wert von Pi kann aus dem Wert 4R geschätzt werden. Dabei ist R das Verhältnis zwischen der Anzahl der Punkte innerhalb des Kreises zur Gesamtanzahl der Punkte innerhalb des Quadrats. Je größer die Anzahl der Punkte, desto genauer die Schätzung.

Verwenden Sie den folgenden Befehl zum Ausführen dieses Beispiels. Dieser Befehl verwendet 16 Karten mit 10.000.000 Stichproben, um den Wert von Pi zu schätzen:

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar pi 16 10000000

Der zurückgegebene Wert sollte etwa 3.14159155000000000000 lauten. Als Referenz: Die ersten 10 Dezimalstellen von Pi sind 3,1415926535.

10-GB-GraySort-Beispiel

GraySort ist ein Sortierungs-Benchmark. Die Metrik ist die Sortiergeschwindigkeit (TB/Minute), die beim Sortieren großer Datenmengen erreicht wird (normalerweise mindestens 100 TB).

Dieses Beispiel verwendet bescheidene 10GB an Daten, um eine zügige Ausführung zu ermöglichen. Es verwendet die MapReduce-Anwendungen, die von Owen O'Malley und Arun Murthy entwickelt wurden. Diese Anwendungen haben im Jahr 2009 den jährlichen allgemeinen Terabyte-Sortierbenchmark („Daytona“) mit einem Durchsatz von 0,578 TB/Min (100 TB in 173 Minuten) gewonnen. Weitere Informationen zu diesem und anderen Sortier-Benchmarks finden Sie unter Sort Benchmark (Sortier-Benchmark).

Dieses Beispiel verwendet drei Sätze von MapReduce-Programmen:

  • TeraGen: Ein MapReduce-Programm, das Zeilen mit zu sortierenden Daten generiert

  • TeraSortprüft die Eingangsdaten und verwendet MapReduce, um die Daten in eine Gesamtreihenfolge zu bringen.

    TeraSort ist eine MapReduce-Standardsortierung, die zusätzlich einen eigenen Partitionierer bietet. Der Partitionierer verwendet eine sortierte Liste mit N-1 Stichprobenschlüsseln, um den Schlüsselbereich für die einzelnen Reduce-Vorgänge zu definieren. Speziell werden alle Schlüssel mit Probe[i-1] <= Schlüssel < Probe[i] an Reduce-Vorgang i gesendet. Durch den Partitionierer wird sichergestellt, dass die Ausgaben der Reduce-Vorgänge i immer kleiner sind als die Ausgabe des Reduce-Vorgangs i+1.

  • TeraValidate: Ein MapReduce-Programm, das die globale Sortierung der Ausgabe prüft

    TeraValidate erstellt eine Map pro Datei im Ausgabeverzeichnis, und jede Map stellt sicher, dass jeder Schlüssel kleiner als der vorherige oder gleich dem vorherigen Schlüssel ist. Die Zuordnungsfunktion generiert Datensätze des ersten und letzten Schlüssels jeder Datei. Die Reduce-Funktion stellt sicher, dass der erste Schlüssel der Datei i größer ist als der letzte Schlüssel der Datei i-1. Probleme werden als Ausgabe der Reduce-Phase zusammen mit den Schlüsseln gemeldet, die nicht in der richtigen Reihenfolge sind.

Verwenden Sie die folgenden Schritte, um Daten zu generieren und die Ausgabe zu sortieren und zu überprüfen:

  1. Generieren von 10GB Daten, die im Standardspeicher des HDInsight-Clusters unter /example/data/10GB-sort-input gespeichert werden:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapred.map.tasks=50 100000000 /example/data/10GB-sort-input
    

    -Dmapred.map.tasks gibt für Hadoop an, wie viele Aufgaben für diesen Auftrag verwendet werden sollen. Die letzten beiden Parameter weisen den Auftrag an, 10 GB Daten zu erstellen und unter /example/data/10GB-sort-input zu speichern.

  2. Führen Sie den folgenden Befehl aus, um die Daten zu sortieren:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapred.map.tasks=50 -Dmapred.reduce.tasks=25 /example/data/10GB-sort-input /example/data/10GB-sort-output
    

    -Dmapred.reduce.tasks gibt für Hadoop an, wie viele Reduce-Aufgaben für den Auftrag verwendet werden sollen. Die letzten beiden Parameter sind nur die Eingabe- und Ausgabespeicherorte für Daten.

  3. Verwenden Sie folgenden Code zum Überprüfen der Daten, die durch die Sortierung generiert wurden:

    yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapred.map.tasks=50 -Dmapred.reduce.tasks=25 /example/data/10GB-sort-output /example/data/10GB-sort-validate
    

Nächste Schritte

In diesem Artikel haben Sie gelernt, wie die Beispiele ausgeführt werden, die in Linux-basierten HDInsight-Clustern enthalten sind. Lernprogramme zu Pig, Hive und MapReduce mit HDInsight finden Sie in den folgenden Themen: