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

Lär dig hur du kör MapReduce-exemplen som ingår i Apache Hadoop i 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 i Pi.
dbcount Räknar sidvisningsloggarna som lagras i en databas.
distbbp Använder en BBP-typformel för att beräkna exakta bitar av Pi.
Grep Räknar matchningar 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 Panel om program för att hitta lösningar på pentomino problem.
Pi Beräknar Pi med hjälp av 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 skrivs av den slumpmässiga skrivaren.
Sudoku En sudoku-lösare.
teragen Generera data för terasort.
terasort Kör terasort.
teravalidate Kontrollerar 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 ordräkningsexemplet

  1. Anslut till HDInsight med hjälp av 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 ordräkningsexemplet :

    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 för att räkna alla ord i Notebooks för Leonardo da Vinci, som tillhandahålls som exempeldata med klustret:

    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äse 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 på standardlagringen för klustret, inte det lokala filsystemet.

    Anteckning

    Som anges i hjälpen för wordcount-exemplet kan du också ange flera indatafiler. Skulle 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 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 genereras av jobbet. Den visar utdata till 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 ett logikpussel 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 för de tomma cellerna. Den tidigare länken innehåller mer information om pusslet, men syftet med det här exemplet är att lösa för 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 indikerar en tom cell)
  • Celler avgränsas med ett blanksteg

Det finns ett visst sätt att konstruera Sudoku pussel; 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 (kvasi-Monte Carlo)-metod för att uppskatta värdet av pi. Punkter placeras slumpmässigt i en enhetsruta. Kvadraten innehåller också en cirkel. Sannolikheten att punkterna faller inom cirkeln är lika med cirkelns yta, pi/4. Värdet för pi kan beräknas från värdet för 4R. R är förhållandet mellan antalet punkter som finns inuti cirkeln och det totala antalet punkter som finns i 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.1415915500000000000000000. För referenser är de första 10 decimalerna i pi 3,1415926535.

10 GB GraySort-exempel

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

I det här exemplet används blygsamma 10 GB data så att de kan köras relativt snabbt. Den använder MapReduce-program som utvecklats av Owen O'Malley och Arun Murthy. Dessa program vann det årliga terabytesorteringsmåttet för generell användning ("Daytona") 2009, med en hastighet på 0,578 TB/min (100 TB på 173 minuter). Mer information om detta och andra sorteringsmått finns på webbplatsen Sort Benchmark .

I det här exemplet används 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 Standard MapReduce-sortering, förutom en anpassad partitionerare. Partitioneraren använder en sorterad lista med N-1-samplade nycklar som definierar nyckelintervallet för varje reduce. I synnerhet skickas alla nycklar som exempel[i-1] <= nyckelexempel < [i] för att minska i. Den här partitioneraren garanterar att utdata från reduce i är mindre än utdata från reduce i+1.

  • TeraValidate: Ett MapReduce-program som verifierar att utdata är globalt sorterade

    Den skapar en mappning per fil i utdatakatalogen, och varje karta säkerställer att varje nyckel är mindre än eller lika med den föregående. Kartfunktionen genererar poster för de första och sista nycklarna i varje fil. Reduce-funktionen säkerställer att den första nyckeln i är större än den sista nyckeln för 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 sedan verifiera utdata:

  1. Generera 10 GB data, som lagras i 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.tasks anger 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.tasks anger 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: