Executar os exemplos de MapReduce incluídos no HDInsight

Saiba como executar os exemplos de MapReduce incluídos com Apache Hadoop no HDInsight.

Pré-requisitos

Os exemplos do MapReduce

Os exemplos estão localizados no cluster HDInsight em /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar. O código-fonte para esses exemplos está incluído no cluster HDInsight em /usr/hdp/current/hadoop-client/src/hadoop-mapreduce-project/hadoop-mapreduce-examples.

Os exemplos a seguir estão contidos neste arquivo:

Amostra Descrição
aggregatewordcount Conta as palavras nos arquivos de entrada.
aggregatewordhist Computa o histograma das palavras nos arquivos de entrada.
bbp Usa Bailey-Borwein-Plouffe para computar os dígitos exatos de Pi.
dbcount Conta os logs de pageview armazenados em um banco de dados.
distbbp Usa uma fórmula do tipo BBP para computar os bits exatos de Pi.
grep Conta as correspondências de uma regex na entrada.
join Faz a união de conjuntos de dados classificados e particionados igualmente.
multifilewc Conta palavras de vários arquivos.
pentomino Um programa para organizar peças lado a lado visando a encontrar soluções para problemas de pentomino.
pi Estima Pi usando um método semelhante ao de Monte Carlo.
randomtextwriter Grava 10 GB de dados de texto aleatórios por nó.
randomwriter Grava 10 GB de dados aleatórios por nó.
secondarysort Define uma classificação secundária para a fase de redução.
sort Classifica os dados gravados pelo gravador aleatório.
sudoku Um solucionador de sudoku.
teragen Gera dados para o terasort.
terasort Executa o terasort.
teravalidate Verificação dos resultados do terasort.
wordcount Conta as palavras nos arquivos de entrada.
wordmean Conta o tamanho médio das palavras nos arquivos de entrada.
wordmedian Conta o tamanho mediano das palavras nos arquivos de entrada.
wordstandarddeviation Conta o desvio padrão do tamanho das palavras nos arquivos de entrada.

Executar o exemplo de wordcount

  1. Conecte-se ao HDInsight usando o SSH. Substitua CLUSTER pelo nome do cluster e insira o seguinte comando:

    ssh sshuser@CLUSTER-ssh.azurehdinsight.net
    
  2. Na sessão de SSH, use o seguinte comando para listar as amostras:

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

    Esse comando gera a lista de exemplos da seção anterior deste documento.

  3. Use o comando a seguir para obter ajuda com um exemplo específico. Neste caso, o exemplo é wordcount :

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

    Você receberá a seguinte mensagem:

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

    Essa mensagem indica que você pode fornecer vários caminhos de entrada para os documentos de origem. O caminho final é o local em que a saída (contagem de palavras em documentos de origem) está armazenada.

  4. Use o seguinte para contar todas as palavras nos blocos de anotações de Leonardo da Vinci, que são fornecidos como dados de exemplo com o cluster:

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

    A entrada para esse trabalho é lida pela entrada /example/data/gutenberg/davinci.txt. A saída desse exemplo é armazenada em /example/data/davinciwordcount. Ambos os caminhos estão localizados no armazenamento padrão do cluster, não no sistema de arquivos local.

    Observação

    Conforme observado na ajuda do exemplo wordcount, você também pode especificar vários arquivos de entrada. Por exemplo, 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 contaria as palavras em davinci.txt e ulysses.txt.

  5. Quando o trabalho for concluído, use o seguinte comando para exibir a saída:

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

    Esse comando concatena todos os arquivos de saída produzidos pelo trabalho. Ele exibe a saída para o console. A saída é semelhante ao texto a seguir:

    zum     1
    zur     1
    zwanzig 1
    zweite  1
    

    Cada linha representa uma palavra e quantas vezes ela ocorreu nos dados de entrada.

O exemplo Sudoku

Sudoku é um quebra-cabeça lógico composto por nove grades de 3x3. Algumas células da grade têm números, enquanto outros estão em branco, e a meta é encontrar os números correspondentes às células em branco. O link anterior tem mais informações sobre o quebra-cabeça, mas o propósito dessa amostra é encontrar as respostas para as células em branco. Sendo assim, nossa entrada deve ser um arquivo no seguinte formato:

  • Nove linhas de nove colunas
  • Cada coluna pode conter um número ou ? (que indica uma célula em branco)
  • As células são separadas por um espaço

Há uma certa forma de construir o quebra-cabeças Sudoku que não permite repetir um número na mesma coluna ou linha. Há um exemplo de cluster do HDInsight construído corretamente. Ele está localizado em /usr/hdp/*/hadoop/src/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/dancing/puzzle1.dta e contém o seguinte texto:

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

Para executar este problema de exemplo por meio do exemplo do Sudoku, use o seguinte comando:

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

Os resultados são semelhantes ao texto a seguir:

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

Exemplo de pi (π)

O exemplo do pi usa um método estatístico (quasi-Monte Carlo) para estimar o valor de pi. Pontos são colocados aleatoriamente em um quadrado de unidade. O quadrado também contém um círculo. A probabilidade de que os pontos caiam dentro do círculo é igual à área do círculo, pi/4. O valor de pi pode ser estimado do valor de 4R. R é a proporção do número de pontos que estão dentro do círculo em relação ao número total de pontos que estão dentro do quadrado. Quanto maior a amostra de pontos usados, melhor será a estimativa.

Use o seguinte comando para executar o exemplo. O comando usa 16 mapas com 10.000.000 amostras cada um para estimar o valor de pi:

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

O valor retornado por este comando deve ser semelhante a 3,14159155000000000000. Para referência, as 10 primeiras casas decimais de pi são 3,1415926535.

Exemplo de GraySort de 10 GB

GraySort é um tipo de parâmetro de comparação. A métrica é a taxa de classificação (TB/minuto) que é obtida durante a classificação de grandes quantidades de dados, geralmente um mínimo de 100 TB.

Este exemplo usa uma quantidade modesta de 10 GB de dados para que possa ser executado de modo relativamente rápido. Ele usa os aplicativos MapReduce desenvolvidos por Owen O'Malley e Arun Murthy. Esses aplicativos ganharam o parâmetro de comparação anual de classificação de terabytes de uso geral ("Daytona") em 2009, com uma taxa de 0,578 TB/min (100 TB em 173 minutos). Para obter mais informações sobre esse e outros benchmarks de classificação, consulte o site Sort Benchmark.

Este exemplo usa três conjuntos de programas MapReduce:

  • TeraGen: um programa de MapReduce que gera linhas de dados para classificar

  • TeraSort: cria amostras dos dados de entrada e usa o MapReduce para classificar os dados em uma ordem total

    A TeraSort é uma classificação de MapReduce padrão, exceto por um particionador personalizado. O particionador usa uma lista classificada de N-1 chaves amostradas que definem o intervalo de chave para cada redução. Em particular, todas as chaves dessa amostra[i-1] <= chave < amostra[i] são enviadas para reduzir i. Esse particionador garante que as saídas da redução i sejam todas menores do que a saída da redução i+1.

  • TeraValidate: um programa de MapReduce que valida que a saída é classificada globalmente

    Ele cria um mapa por arquivo no diretório de saída, e cada mapa garante que cada chave seja menor ou igual à anterior. A função map gera registros das primeiras e últimas chaves de cada arquivo. A função de redução garante que a primeira chave do arquivo i seja maior do que a última chave do arquivo i-1. Todos os problemas são relatados como uma saída da fase de redução, com as chaves que estão fora de ordem.

Use as seguintes etapas para gerar dados, classificar e validar a saída:

  1. Gere 10 GB de dados, que são armazenados no armazenamento padrão do cluster HDInsight em /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
    

    O -Dmapred.map.tasks informa o Hadoop quantas tarefas de mapeamento serão usadas para este trabalho. Os dois parâmetros finais instruem o trabalho a criar 10 GB de dados e armazená-los em /example/data/10GB-sort-input.

  2. Use o comando a seguir para classificar os dados:

    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
    

    O -Dmapred.reduce.tasks informa o Hadoop quantas tarefas de redução serão usadas para o trabalho. Os dois parâmetros finais são apenas os locais de entrada e saída dos dados.

  3. Use o seguinte para validar os dados gerados pela classificação:

    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
    

Próximas etapas

Neste artigo, você aprendeu a executar os exemplos incluídos com os clusters do HDInsight baseados em Linux. Para obter tutoriais sobre como usar o Pig, o Hive e o MapReduce com o HDInsight, consulte os seguintes tópicos: