A Fase Mapa de Fluxo de Aplicativos MapReduce do Hadoop

Uma aplicação MapReduce processa os dados em separações de entrada em um registro por registro base e que cada ficha é entendida por ser um MapReduce valor chave par. Após as divisões de entrada foram calculados, as tarefas mapeador pode começar a processá-los - isto é, logo após a instalação de agendamento do Resource Manager atribui-lhes os seus recursos de processamento. (Em Hadoop 1, o JobTracker atribui tarefas Mapper para slots de processamento específicas.)

A tarefa mapeador de si processa sua entrada dividir um registro de cada vez - na figura, este registro solitário é representado pelo par chave / valor. No caso dos nossos dados de voo, quando as divisões de entrada são calculados (usando o método de processamento de arquivo padrão para arquivos de texto), o pressuposto é que cada linha no arquivo de texto é um único registro.

image0.jpg

Para cada registo, o texto da própria linha representa o valor, e o deslocamento de byte de cada linha, desde o início da separação é considerado para ser a chave.

Você pode estar se perguntando por que o número da linha não é usado em vez do deslocamento de byte. Quando você considera que um arquivo de texto muito grande é dividido em diversos blocos de dados individuais, e é processado como muitas divisões, o número da linha é um conceito arriscado.

O número de linhas em cada grupo variar, de modo que seria impossível para calcular o número de linhas anteriores que está a ser processado. No entanto, com o deslocamento de byte, pode ser preciso, porque cada bloco tem um número fixo de bytes.

Como uma tarefa mapeador processa cada registro, ele gera um novo par chave / valor: A chave eo valor aqui pode ser completamente diferente do par de entrada. A saída da tarefa mapeador é a coleção completa de todos esses pares de chave / valor.

Antes do arquivo final de saída para cada tarefa mapeador é escrito, a saída é dividida com base na chave e ordenada. Esta separação significa que todos os valores para cada tecla são agrupados juntos.

No caso de a aplicação bastante básico de exemplo, existe apenas um único redutor, de modo que toda a saída da tarefa mapeador é gravado em um único arquivo. Mas, em casos com vários redutores, cada tarefa mapeador pode gerar vários arquivos de saída também.

A composição desses arquivos de saída é baseada na chave de particionamento. Por exemplo, se há apenas três saída de chaves de particionamento distintas para as tarefas mapeador e tiver configurado três redutores para o trabalho, haverá três arquivos de saída mapeador. Neste exemplo, se mapeador de uma tarefa em particular processa uma separação de entrada e de saída que gera com duas das três teclas, haverá apenas dois ficheiros de saída.

Sempre comprimir arquivos de saída para o seu trabalho mapeador '. O maior benefício aqui é em ganhos de desempenho, porque escrever arquivos de saída menores minimiza o custo inevitável de transferir a saída mapeador para os nódulos onde os redutores estão em execução.

O particionador padrão é mais do que suficiente na maioria das situações, mas às vezes você pode querer personalizar a forma como os dados são particionado antes de ser processada pelos redutores. Por exemplo, você pode querer os dados em seu resultado define a serem classificados pela chave e seus valores - conhecido como um secundário ordenar.

Para fazer isso, você pode substituir o partitioner padrão e implementar o seu próprio. Este processo requer alguns cuidados, no entanto, porque você vai querer garantir que o número de registros em cada partição é uniforme. (Se um redutor tem de processar muito mais dados do que os outros redutores, você vai esperar por seu trabalho MapReduce para terminar enquanto o único redutor de excesso de trabalho é mergulhada em sua desproporcionalmente grande conjunto de dados.)

Usando arquivos intermediários de tamanho uniforme, você pode aproveitar melhor o paralelismo disponíveis no processamento de MapReduce.

menu