Executar os exemplos do MapReduce incluídos no HDInsight

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

Pré-requisitos

Os exemplos do MapReduce

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

Os exemplos seguintes estão contidos neste arquivo:

Sample Descrição
aggregatewordcount Conta as palavras nos ficheiros de entrada.
aggregatewordhist Calcula o histograma das palavras nos ficheiros de entrada.
bbp Utiliza Bailey-Borwein-Plouffe para calcular dígitos exatos de Pi.
dbcount Conta os registos de pageview armazenados numa base de dados.
distbbp Utiliza uma fórmula do tipo BBP para calcular os bits exatos de Pi.
grep Conta as correspondências de um regex na entrada.
aderir Efetua uma associação através de conjuntos de dados ordenados e igualmente particionados.
multifilewc Conta palavras de vários ficheiros.
pentomino Programa de colocação de mosaicos para encontrar soluções para problemas de pentomino.
pi Calcula Pi com um método quasi-Monte Carlo.
randomtextwriter Escreve 10 GB de dados textuais aleatórios por nó.
randomwriter Escreve 10 GB de dados aleatórios por nó.
secondarysort Define uma ordenação secundária para a fase de redução.
ordenar Ordena os dados escritos pelo escritor aleatório.
sudoku Um solver sudoku.
teragen Gerar dados para o terasort.
terasort Execute o terasort.
teravalidate A verificar os resultados de terasort.
wordcount Conta as palavras nos ficheiros de entrada.
wordmean Conta o comprimento médio das palavras nos ficheiros de entrada.
wordmedian Conta o comprimento mediano das palavras nos ficheiros de entrada.
wordstandarddeviation Conta o desvio padrão do comprimento das palavras nos ficheiros de entrada.

Executar o exemplo de contagem de palavras

  1. Ligue-se ao HDInsight através de SSH. Substitua CLUSTER pelo nome do cluster e, em seguida, introduza o seguinte comando:

    ssh sshuser@CLUSTER-ssh.azurehdinsight.net
    
  2. Na sessão SSH, utilize o seguinte comando para listar os exemplos:

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

    Este comando gera a lista de exemplo da secção anterior deste documento.

  3. Utilize o seguinte comando para obter ajuda sobre um exemplo específico. Neste caso, o exemplo de contagem de palavras :

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

    Recebe a seguinte mensagem:

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

    Esta mensagem indica que pode fornecer vários caminhos de entrada para os documentos de origem. O caminho final é onde o resultado (contagem de palavras nos documentos de origem) é armazenado.

  4. Utilize o seguinte para contar todas as palavras nos Blocos de Notas de Leonardo da Vinci, que são fornecidos como dados de exemplo com o seu 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 esta tarefa é lida a partir de /example/data/gutenberg/davinci.txt. O resultado deste exemplo é armazenado em /example/data/davinciwordcount. Ambos os caminhos estão localizados no armazenamento predefinido do cluster e não no sistema de ficheiros local.

    Nota

    Conforme indicado na ajuda do exemplo de contagem de palavras, também pode especificar vários ficheiros 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 palavras em davinci.txt e ulysses.txt.

  5. Depois de concluída a tarefa, utilize o seguinte comando para ver o resultado:

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

    Este comando concatena todos os ficheiros de saída produzidos pela tarefa. Apresenta a saída para a consola. O resultado é semelhante ao seguinte texto:

    zum     1
    zur     1
    zwanzig 1
    zweite  1
    

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

O exemplo de Sudoku

Sudoku é um puzzle lógico composto por nove grelhas 3x3. Algumas células na grelha têm números, enquanto outras estão em branco e o objetivo é resolver as células em branco. A ligação anterior tem mais informações sobre o puzzle, mas o objetivo deste exemplo é resolver as células em branco. Por isso, a nossa entrada deve ser um ficheiro que esteja no seguinte formato:

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

Há uma certa maneira de construir puzzles sudoku; não pode repetir um número numa coluna ou linha. Existe um exemplo do cluster do HDInsight que foi construído corretamente. 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 através do exemplo de Sudoku, utilize 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 seguinte texto:

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

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

Utilize o seguinte comando para executar este exemplo. Este comando utiliza 16 mapas com 10 000 000 amostras cada para estimar o valor de pi:

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

O valor devolvido por este comando é semelhante a 3.141591550000000000000000. Para referências, as primeiras 10 casas decimais de pi são 3.1415926535.

Exemplo de GraySort de 10 GB

GraySort é uma ordenação de referência. A métrica é a taxa de ordenação (TB/minuto) que é obtida ao ordenar grandes quantidades de dados, normalmente um mínimo de 100 TB.

Este exemplo utiliza uns modestos 10 GB de dados para que possam ser executados relativamente rapidamente. Utiliza as aplicações MapReduce desenvolvidas por Owen O'Malley e Arun Murthy. Estas aplicações ganharam a referência anual de ordenação de terabytes para fins gerais ("Daytona") em 2009, com uma taxa de 0,578 TB/min (100 TB em 173 minutos). Para obter mais informações sobre esta e outras referências de ordenação, veja o site Sort Benchmark .

Este exemplo utiliza três conjuntos de programas MapReduce:

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

  • TeraSort: amostra os dados de entrada e utiliza o MapReduce para ordenar os dados numa ordem total

    TeraSort é uma ordenação mapReduce padrão, exceto um particionador personalizado. O particionador utiliza uma lista ordenada de chaves de exemplo N-1 que definem o intervalo de chaves para cada redução. Em particular, todas as chaves, tais como o exemplo[i-1] <= exemplo de chave < [i] são enviadas para reduzir i. Este particionador garante que as saídas de redução i são todas inferiores à saída da redução i+1.

  • TeraValidate: um programa MapReduce que valida que o resultado está ordenado globalmente

    Cria um mapa por ficheiro no diretório de saída e cada mapa garante que cada chave é menor ou igual à anterior. A função de mapa gera registos da primeira e última chaves de cada ficheiro. A função reduce garante que a primeira chave do ficheiro i é maior do que a última chave do ficheiro i-1. Quaisquer problemas são comunicados como uma saída da fase de redução, com as chaves que estão fora de ordem.

Utilize os seguintes passos para gerar dados, ordenar e, em seguida, validar a saída:

  1. Gerar 10 GB de dados, que é armazenado no armazenamento predefinido do cluster do 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 indica ao Hadoop quantas tarefas de mapa utilizar para esta tarefa. Os dois parâmetros finais instruem a tarefa a criar 10 GB de dados e a armazená-la em /example/data/10GB-sort-input.

  2. Utilize o seguinte comando para ordenar 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 indica ao Hadoop quantas tarefas de redução utilizar para a tarefa. Os dois parâmetros finais são apenas as localizações de entrada e saída dos dados.

  3. Utilize o seguinte para validar os dados gerados pela ordenaçã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
    

Passos seguintes

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