A fase de mapa de fluxo da aplicação mapreduce do hadoop
Uma aplicação MapReduce processa os dados em separações de entrada sobre um registro por registro base e que cada registro é entendida por MapReduce para ser um valor chave par. Após as divisões de entrada foram calculados, as tarefas de mapeador pode começar a processá-los - ou seja, 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 do mapeador de ranhuras de processamento específicos.)
A tarefa mapeador 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 vôo, quando os splits de entrada são calculados (usando o método de processamento de arquivo padrão para arquivos de texto), o pressuposto é que cada linha do arquivo de texto é um único registro.
Para cada registro, o texto da própria linha representa o valor, eo deslocamento de byte de cada linha desde o início do desdobramento é considerado 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 vários 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 divisão variar, de modo que seria impossível para calcular o número de linhas anteriores a um ser processado. No entanto, com o deslocamento de byte, você pode ser mais 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 entradas. 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. Este particionamento significa que todos os valores para cada chave são agrupadas.
No caso da aplicação bastante básico amostra, 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.
Video: Hadoop Map Reduce Development - 04 Distributed Cache - Development of Driver
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 de mapeador e você configurou três redutores para o trabalho, haverá três arquivos de saída mapeador. Neste exemplo, se uma tarefa mapeador de processos específicos de uma divisão de entrada e gera saída com duas das três chaves, haverá apenas dois arquivos 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 adequado na maioria das situações, mas às vezes você pode querer personalizar a forma como os dados são particionado antes de ser processado 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 concluir enquanto o único redutor de excesso de trabalho está mergulhada em sua desproporcionalmente grande conjunto de dados.)
Usando arquivos intermediários de tamanho uniforme, você pode aproveitar melhor o paralelismo disponível em processamento de MapReduce.