De MapReduce-voorbeelden uitvoeren die zijn opgenomen in HDInsight
Meer informatie over het uitvoeren van de MapReduce-voorbeelden die zijn opgenomen in Apache Hadoop in HDInsight.
Vereisten
Een Apache Hadoop-cluster in HDInsight. Zie Aan de slag met HDInsight in Linux.
Een SSH-client. Zie voor meer informatie Verbinding maken met HDInsight (Apache Hadoop) via SSH.
De MapReduce-voorbeelden
De voorbeelden bevinden zich in het HDInsight-cluster op /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar
. De broncode voor deze voorbeelden is opgenomen in het HDInsight-cluster op /usr/hdp/current/hadoop-client/src/hadoop-mapreduce-project/hadoop-mapreduce-examples
.
De volgende voorbeelden zijn opgenomen in dit archief:
Voorbeeld | Beschrijving |
---|---|
aggregatewordcount | Telt de woorden in de invoerbestanden. |
aggregatewordhist | Berekent het histogram van de woorden in de invoerbestanden. |
bbp |
Gebruikt Bailey-Borwein-Plouffe om exacte cijfers van Pi te berekenen. |
dbcount | Telt de pageview-logboeken die zijn opgeslagen in een database. |
distbbp | Maakt gebruik van een BBP-formule om exacte bits van Pi te berekenen. |
Grep | Telt de overeenkomsten van een regex in de invoer. |
join | Voert een join uit over gesorteerde, gelijkmatig gepartitioneerde gegevenssets. |
multifilewc | Telt woorden uit verschillende bestanden. |
pentomino | Tegel leggen programma om oplossingen voor pentomino problemen te vinden. |
Pi | Maakt een schatting van Pi met behulp van een quasi-Monte Carlo-methode. |
randomtextwriter | Schrijft 10 GB aan willekeurige tekstgegevens per knooppunt. |
randomwriter |
Schrijft 10 GB aan willekeurige gegevens per knooppunt. |
secondarysort |
Definieert een secundaire sortering voor de reductiefase. |
sorteren | Hiermee sorteert u de gegevens die zijn geschreven door de willekeurige schrijver. |
Sudoku | Een sudoku-oplosser. |
teragen | Genereer gegevens voor het terasort. |
terasort | Voer het terasort uit. |
teravalidate | Resultaten van terasort controleren. |
woordaantal | Telt de woorden in de invoerbestanden. |
wordmean |
Telt de gemiddelde lengte van de woorden in de invoerbestanden. |
wordmedian |
Telt de mediaanlengte van de woorden in de invoerbestanden. |
wordstandarddeviation | Telt de standaarddeviatie van de lengte van de woorden in de invoerbestanden. |
Het voorbeeld van het woordaantal uitvoeren
Maak verbinding met HDInsight met behulp van SSH. Vervang door
CLUSTER
de naam van uw cluster en voer de volgende opdracht in:ssh sshuser@CLUSTER-ssh.azurehdinsight.net
Gebruik vanuit de SSH-sessie de volgende opdracht om de voorbeelden weer te geven:
yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar
Met deze opdracht wordt de lijst met voorbeelden uit de vorige sectie van dit document gegenereerd.
Gebruik de volgende opdracht om hulp te krijgen bij een specifiek voorbeeld. In dit geval is het voorbeeld van het woordaantal :
yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount
U ontvangt het volgende bericht:
Usage: wordcount <in> [<in>...] <out>
Dit bericht geeft aan dat u verschillende invoerpaden voor de brondocumenten kunt opgeven. Het laatste pad is waar de uitvoer (het aantal woorden in de brondocumenten) wordt opgeslagen.
Gebruik het volgende om alle woorden in de notebooks van Leonardo da Vinci te tellen, die als voorbeeldgegevens bij uw cluster worden geleverd:
yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar wordcount /example/data/gutenberg/davinci.txt /example/data/davinciwordcount
Invoer voor deze taak wordt gelezen uit
/example/data/gutenberg/davinci.txt
. Uitvoer voor dit voorbeeld wordt opgeslagen in/example/data/davinciwordcount
. Beide paden bevinden zich in de standaardopslag voor het cluster, niet voor het lokale bestandssysteem.Notitie
Zoals vermeld in de help voor het voorbeeld van het woordaantal, kunt u ook meerdere invoerbestanden opgeven. Zou bijvoorbeeld
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
woorden tellen in zowel davinci.txt als ulysses.txt.Zodra de taak is voltooid, gebruikt u de volgende opdracht om de uitvoer weer te geven:
hdfs dfs -cat /example/data/davinciwordcount/*
Met deze opdracht worden alle uitvoerbestanden samengevoegd die door de taak worden geproduceerd. De uitvoer naar de console wordt weergegeven. De uitvoer lijkt op het volgende:
zum 1 zur 1 zwanzig 1 zweite 1
Elke regel vertegenwoordigt een woord en hoe vaak dit is opgetreden in de invoergegevens.
Het Sudoku-voorbeeld
Sudoku is een logische puzzel die bestaat uit negen 3x3 rasters. Sommige cellen in het raster hebben getallen, terwijl andere leeg zijn en het doel is om op te lossen voor de lege cellen. De vorige koppeling bevat meer informatie over de puzzel, maar het doel van dit voorbeeld is om de lege cellen op te lossen. Onze invoer moet dus een bestand zijn met de volgende indeling:
- Negen rijen van negen kolommen
- Elke kolom kan een getal of
?
(wat een lege cel aangeeft) bevatten - Cellen worden gescheiden door een spatie
Er is een bepaalde manier om Sudoku-puzzels te bouwen; U kunt een getal in een kolom of rij niet herhalen. Er is een voorbeeld van het HDInsight-cluster dat correct is opgebouwd. Het bevindt zich op /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta
en bevat de volgende tekst:
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
Als u dit voorbeeldprobleem wilt uitvoeren via het Sudoku-voorbeeld, gebruikt u de volgende opdracht:
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
De resultaten zien er ongeveer als volgt uit:
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
Pi-voorbeeld (π)
De pi-steekproef maakt gebruik van een statistische methode (quasi-Monte Carlo) om de waarde van pi te schatten. Punten worden willekeurig in een eenheids vierkant geplaatst. Het vierkant bevat ook een cirkel. De kans dat de punten binnen de cirkel vallen, is gelijk aan het gebied van de cirkel, pi/4. De waarde van pi kan worden geschat op basis van de waarde van 4R
. R is de verhouding van het aantal punten dat zich binnen de cirkel bevindt tot het totale aantal punten dat zich binnen het vierkant bevindt. Hoe groter de steekproef van de gebruikte punten, hoe beter de schatting is.
Gebruik de volgende opdracht om dit voorbeeld uit te voeren. Met deze opdracht worden 16 kaarten met elk 10.000.000 voorbeelden gebruikt om de waarde van pi te schatten:
yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar pi 16 10000000
De waarde die door deze opdracht wordt geretourneerd, is vergelijkbaar met 3.14159155000000000000. Voor verwijzingen zijn de eerste tien decimalen van pi 3,1415926535.
GraySort-voorbeeld van 10 GB
GraySort is een standaardsorteerd. De metrische waarde is de sorteersnelheid (TB/minuut) die wordt bereikt tijdens het sorteren van grote hoeveelheden gegevens, meestal een minimum van 100 TB.
In dit voorbeeld wordt een bescheiden 10 GB aan gegevens gebruikt, zodat deze relatief snel kunnen worden uitgevoerd. Het maakt gebruik van de MapReduce-toepassingen die zijn ontwikkeld door Owen O'Malley
en Arun Murthy
. Deze toepassingen wonnen in 2009 de jaarlijkse terabyte sorteerbenchmark (General-Purpose) met een snelheid van 0,578 TB/min (100 TB in 173 minuten). Zie de site Sorteerbenchmark voor meer informatie over deze en andere sorteerbenchmarks.
In dit voorbeeld worden drie sets MapReduce-programma's gebruikt:
TeraGen: een MapReduce-programma dat rijen met gegevens genereert om te sorteren
TeraSort: steekt de invoergegevens uit en gebruikt MapReduce om de gegevens in een totale volgorde te sorteren
TeraSort is een standaard MapReduce-sortering, met uitzondering van een aangepaste partitioner. De partitioner maakt gebruik van een gesorteerde lijst met N-1 steekproefsleutels die het sleutelbereik voor elke reductie definiëren. In het bijzonder worden alle sleutels zoals sample[i-1] <= sleutelvoorbeeld < [i] verzonden om i te verminderen. Deze partitioner garandeert dat de uitvoer van reduce
i
allemaal kleiner is dan de uitvoer van reducei+1
.TeraValidate: een MapReduce-programma dat valideert dat de uitvoer globaal is gesorteerd
Er wordt één toewijzing per bestand in de uitvoermap gemaakt en elke toewijzing zorgt ervoor dat elke sleutel kleiner is dan of gelijk is aan de vorige. De toewijzingsfunctie genereert records van de eerste en laatste sleutel van elk bestand. De reduce-functie zorgt ervoor dat de eerste sleutel van bestand i groter is dan de laatste sleutel van bestand i-1. Eventuele problemen worden gerapporteerd als uitvoer van de reductiefase, met de sleutels die niet op volgorde zijn.
Gebruik de volgende stappen om gegevens te genereren, te sorteren en de uitvoer vervolgens te valideren:
Genereer 10 GB aan gegevens, die worden opgeslagen in de standaardopslag van het HDInsight-cluster op
/example/data/10GB-sort-input
:yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapred.map.tasks=50 100000000 /example/data/10GB-sort-input
De
-Dmapred.map.tasks
vertelt Hadoop hoeveel toewijzingstaken voor deze taak moeten worden gebruikt. De laatste twee parameters instrueren de taak om 10 GB aan gegevens te maken en op te slaan op/example/data/10GB-sort-input
.Gebruik de volgende opdracht om de gegevens te sorteren:
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
De
-Dmapred.reduce.tasks
vertelt Hadoop hoeveel reductietaken voor de taak moeten worden gebruikt. De laatste twee parameters zijn alleen de invoer- en uitvoerlocaties voor gegevens.Gebruik het volgende om de gegevens te valideren die door de sortering worden gegenereerd:
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
Volgende stappen
In dit artikel hebt u geleerd hoe u de voorbeelden uitvoert die zijn opgenomen in de HDInsight-clusters op basis van Linux. Zie de volgende onderwerpen voor zelfstudies over het gebruik van Pig, Hive en MapReduce met HDInsight: