A fase aleatória de fluxo de aplicativo MapReduce do Hadoop
Após a fase de Mapa e antes do início da fase de Reduzir é um processo de transferência, como conhecido embaralhar e classificar. Aqui, os dados das tarefas mapeador é preparado e mudou-se para os gânglios, onde as tarefas redutor serão executados. Quando a tarefa mapeador estiver concluída, os resultados são classificados pela chave, dividido, se houver vários redutores, em seguida, gravados no disco.
Você pode ver este conceito na figura a seguir, que mostra o fluxo de processamento de dados MapReduce e sua interação com os componentes físicos do cluster Hadoop. (Uma nota rápida: Os dados na memória é representado por quadrados brancos, e os dados armazenados no disco é representado por quadrados cinzentos.)
Para acelerar o processo global MapReduce, os dados são imediatamente mudou-se para nós as tarefas redutor ", para evitar uma enxurrada de atividade de rede quando a tarefa final mapeador termina seu trabalho. Esta transferência acontece enquanto a tarefa mapeador está em execução, como as saídas para cada registro - lembre-se - são armazenadas na memória de uma tarefa de espera redutor. (Você pode configurar se isso acontece - ou não acontece -. E também o número de segmentos envolvidos)
Tenha em mente que mesmo que uma tarefa redutor pode ter a maioria de saída da tarefa mapeador, o processamento da tarefa reduzir não pode começar até que todas as tarefas de mapeador de ter terminado.
Para evitar situações em que o desempenho de uma tarefa de MapReduce é dificultada por uma tarefa mapeador straggling que está sendo executado em um nó escravo fraco desempenho, o quadro MapReduce usa um conceito chamado execução especulativa.
No caso de algumas tarefas mapeador está executando mais lento do que o que é considerado razoável, o Mestre aplicação vai gerar tarefas duplicadas (em Hadoop 1, o JobTracker faz isso). Qualquer que seja a tarefa termina primeiro - o duplicado ou o original - seus resultados são armazenados no disco, e a outra tarefa é morto. Se você está monitorando os trabalhos de perto e está se perguntando por que há mais tarefas em execução mapeador do que o esperado, esta é uma razão provável.
A saída de tarefas mapeador não é escrito para HDFS, mas sim para o disco local no nó escravo onde a tarefa mapeador foi executado. Como tal, não é replicado em todo o cluster Hadoop.
Além de comprimir a saída, você pode potencialmente aumentar o desempenho, executando uma tarefa combinador. Esta tática simples, mostrado aqui, envolve a execução de reduzir a um local da saída para tarefas mapeador individuais.
Na maioria dos casos, nenhuma programação extra é necessária, como você pode dizer que o sistema use a função de redutor. Se você não estiver usando a função de redutor, o que você precisa para garantir que a saída da função combinador é idêntico ao da função de redutor.
Cabe ao quadro MapReduce se a função combinador precisa ser executado uma vez, várias vezes, ou nunca, por isso é fundamental que o código do combinador garante que os resultados finais não são afetados por várias execuções. Executando o combinador pode proporcionar um benefício de desempenho através da diminuição da quantidade de dados intermédia que de outra forma necessitam de ser transferidos através da rede.
Isso também reduz a quantidade de processamento das tarefas redutor precisaria fazer. Você está executando uma tarefa adicional aqui, então é possível que qualquer ganho de desempenho é insignificante ou pode mesmo resultar em pior desempenho global. Sua milhagem pode variar, assim que testar isto com cuidado.
Depois de todos os resultados das tarefas mapeador são copiados para nós as tarefas redutor ', esses arquivos são mesclados e ordenados.