Delen via


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

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

  1. 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
    
  2. 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.

  3. 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.

  4. 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.

  5. 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 reduce i+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:

  1. 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.

  2. 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.

  3. 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: