Kör MapReduce-exemplen som ingår i HDInsight

Lär dig hur du kör MapReduce-exempel som ingår i Apache Hadoop på HDInsight.

Förutsättningar

MapReduce-exemplen

Exemplen finns i HDInsight-klustret på /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar . Källkoden för dessa exempel ingår i HDInsight-klustret på /usr/hdp/current/hadoop-client/src/hadoop-mapreduce-project/hadoop-mapreduce-examples .

Följande exempel finns i det här arkivet:

Exempel Beskrivning
aggregatewordcount Räknar orden i indatafilerna.
aggregatewordhist Beräknar histogrammet för orden i indatafilerna.
Bbp Använder Bailey-Borwein-Plouffe för att beräkna exakta siffror för Pi.
dbcount Räknar sidvisningsloggarna som lagras i en databas.
distbbp Använder en BBP-typformel för att beräkna exakta bitar pi.
Grep Räknar matchningarna för ett regex i indata.
join Utför en koppling över sorterade, lika partitionerade datauppsättningar.
multifilewc Räknar ord från flera filer.
pentomino Panelkartläggningsprogram för att hitta lösningar på pentomino-problem.
Pi Beräknar Pi med en kvasi-Monte Carlo-metod.
randomtextwriter Skriver 10 GB slumpmässiga textdata per nod.
randomwriter Skriver 10 GB slumpmässiga data per nod.
secondarysort Definierar en sekundär sortering till reduce-fasen.
sortera Sorterar de data som skrivits av den slumpmässiga skrivaren.
Sudoku En sudoku-lösare.
teragen Generera data för terasort.
terasort Kör terasort.
teravalidate Kontrollera resultatet av terasort.
wordcount Räknar orden i indatafilerna.
wordmean Räknar den genomsnittliga längden på orden i indatafilerna.
wordmedian Räknar medianlängden för orden i indatafilerna.
wordstandarddeviation Räknar standardavvikelsen för längden på orden i indatafilerna.

Kör wordcount-exemplet

  1. Anslut till HDInsight med SSH. Ersätt CLUSTER med namnet på klustret och ange sedan följande kommando:

    ssh sshuser@CLUSTER-ssh.azurehdinsight.net
    
  2. Från SSH-sessionen använder du följande kommando för att lista exemplen:

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

    Det här kommandot genererar listan med exempel från föregående avsnitt i det här dokumentet.

  3. Använd följande kommando för att få hjälp med ett specifikt exempel. I det här fallet är wordcount-exemplet:

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

    Du får följande meddelande:

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

    Det här meddelandet anger att du kan ange flera indatasökvägar för källdokumenten. Den sista sökvägen är den plats där utdata (antal ord i källdokumenten) lagras.

  4. Använd följande om du vill räkna alla ord i Notebooks ofString da Count, som tillhandahålls som exempeldata med ditt kluster:

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

    Indata för det här jobbet läses från /example/data/gutenberg/davinci.txt . Utdata för det här exemplet lagras i /example/data/davinciwordcount . Båda sökvägarna finns i standardlagringsplatsen för klustret, inte i det lokala filsystemet.

    Anteckning

    Som anges i hjälpen för wordcount-exemplet kan du också ange flera indatafiler. Till exempel 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 skulle räkna ord i både davinci.txt och ulysses.txt.

  5. När jobbet har slutförts använder du följande kommando för att visa utdata:

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

    Det här kommandot sammanfogar alla utdatafiler som skapas av jobbet. Utdata visas i konsolen. De utdata som genereras liknar följande text:

    zum     1
    zur     1
    zwanzig 1
    zweite  1
    

    Varje rad representerar ett ord och hur många gånger det inträffade i indata.

Sudoku-exemplet

Sudoku är en logiksnabb som består av nio 3x3-rutnät. Vissa celler i rutnätet har siffror, medan andra är tomma och målet är att lösa de tomma cellerna. Föregående länk innehåller mer information om spelet, men syftet med det här exemplet är att lösa de tomma cellerna. Därför bör våra indata vara en fil som har följande format:

  • Nio rader med nio kolumner
  • Varje kolumn kan innehålla antingen ett tal ? eller (vilket anger en tom cell)
  • Celler avgränsas med ett blanksteg

Det finns ett visst sätt att konstruera Sudoku-åtgärder. du kan inte upprepa ett tal i en kolumn eller rad. Det finns ett exempel på HDInsight-klustret som är korrekt konstruerat. Den finns på /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta och innehåller följande 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

Om du vill köra det här exempelproblemet via Sudoku-exemplet använder du följande kommando:

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

Resultatet ser ut ungefär så här:

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-exempel (π)

Pi-exemplet använder en statistisk metod (kvasi-Monte Carlo) för att uppskatta värdet för pi. Punkter placeras slumpmässigt i en enhet i kvadrat. Kvadraten innehåller också en cirkel. Sannolikheten att punkterna faller inom cirkeln är lika med arean för cirkeln, pi/4. Värdet för pi kan beräknas från värdet 4R. R är förhållandet mellan antalet punkter i cirkeln och det totala antalet punkter som finns inom kvadraten. Ju större urval av punkter som används, desto bättre är uppskattningen.

Använd följande kommando för att köra det här exemplet. Det här kommandot använder 16 kartor med 10 000 000 exempel vardera för att uppskatta värdet för pi:

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

Värdet som returneras av det här kommandot liknar 3.141591550000000000000. För referenser är de första 10 decimalerna av pi 3,1415926535.

10 GB GraySort-exempel

GraySort är en benchmark-sortering. Måttet är den sorteringsfrekvens (TB/minut) som uppnås när stora mängder data sorteras, vanligtvis minst 100 TB.

I det här exemplet används en liten mängd 10 GB data så att de kan köras relativt snabbt. Den använder MapReduce-program som utvecklats avUkt O'Malley och Arun Murthy. Dessa program vann det årliga sorteringstestet för generell användning ("Daytona") terabyte 2009, med en frekvens på 0,578 TB/min (100 TB på 173 minuter). Mer information om detta och andra sorteringstestvärden finns på webbplatsen Sort Benchmark (Sortera benchmark).

Det här exemplet använder tre uppsättningar MapReduce-program:

  • TeraGen: Ett MapReduce-program som genererar rader med data som ska sorteras

  • TeraSort: Exempel på indata och använder MapReduce för att sortera data i en total ordning

    TeraSort är en vanlig MapReduce-sortering, förutom en anpassad partitionerare. Partitioneraren använder en sorterad lista med N-1-sampelnycklar som definierar nyckelintervallet för varje reduce. I synnerhet skickas alla nycklar som exempel[i-1] <= key < sample[i] för att minska i. Den här partitioneraren garanterar att utdata för reduce i är mindre än utdata för reduce i+1.

  • TeraValidate: Ett MapReduce-program som validerar att utdata sorteras globalt

    Den skapar en karta per fil i utdatakatalogen, och varje mappning säkerställer att varje nyckel är mindre än eller lika med den föregående. Map-funktionen genererar poster för de första och sista nycklarna i varje fil. Reduce-funktionen ser till att den första nyckeln i filen i är större än den sista nyckeln i filen i-1. Eventuella problem rapporteras som utdata från reduce-fasen med de nycklar som är i fel ordning.

Använd följande steg för att generera data, sortera och verifiera sedan utdata:

  1. Generera 10 GB data som lagras till HDInsight-klustrets standardlagring på /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
    

    -Dmapred.map.taskstalar om för Hadoop hur många map-uppgifter som ska användas för det här jobbet. De sista två parametrarna instruerar jobbet att skapa 10 GB data och lagra dem på /example/data/10GB-sort-input .

  2. Använd följande kommando för att sortera data:

    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.taskstalar om för Hadoop hur många reduce-uppgifter som ska användas för jobbet. De sista två parametrarna är bara indata- och utdataplatserna för data.

  3. Använd följande för att verifiera de data som genereras av sorteringen:

    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ästa steg

I den här artikeln har du lärt dig hur du kör exemplen som ingår i Linux-baserade HDInsight-kluster. Självstudier om hur du använder Pig, Hive och MapReduce med HDInsight finns i följande avsnitt: