Vídeo: Minecraft: UMA FÃ DE 11 ANOS FEZ O PIOR MAPA DO MUNDO! 2024
Após a fase do Mapa e antes do início da fase Reduzir é um processo de transferência, conhecido como , e classifique . Aqui, os dados das tarefas do mapeador são preparados e movidos para os nós onde as tarefas redutoras serão executadas. Quando a tarefa do mapeador está concluída, os resultados são classificados por chave, particionado se houver vários redutores e depois gravados em 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 são representados por quadrados brancos, e os dados armazenados no disco são representados por quadrados cinzentos.)
Para acelerar o processo MapReduce, os dados são imediatamente movidos para os nós das redutoras, para evitar uma inundação da atividade da rede quando a tarefa final do mapeador terminar seu trabalho. Essa transferência acontece enquanto a tarefa do mapeador está em execução, pois as saídas para cada registro - lembrar - são armazenadas na memória de uma tarefa de redutor em espera. (Você pode configurar se isso acontece - ou não acontece - e também o número de threads envolvidos.)
Tenha em mente que, mesmo que uma tarefa redutora possa ter a maior parte da saída da tarefa do mapeador, o processamento da tarefa reduzir não pode começar até que todas as tarefas do mapeador tenham terminado.
Para evitar cenários em que o desempenho de um trabalho MapReduce é dificultado por uma tarefa de mapeamento estável que está sendo executada em um nó escravo de baixa performance, a estrutura MapReduce usa um conceito chamado execução especulativa .
No caso de algumas tarefas de mapeamento serem mais lentas do que o considerado considerado razoável, o Mestre de Aplicativos gerará tarefas duplicadas (no Hadoop 1, o JobTracker faz isso). Seja qual for a tarefa que termina primeiro - o duplicado ou o original - seus resultados são armazenados no disco e a outra tarefa é morta. Se você estiver monitorando seus trabalhos de perto e está se perguntando por que há mais tarefas de mapeador executadas do que o esperado, esse é um motivo provável.
A saída das tarefas do mapeador não está escrita no HDFS, mas sim no disco local no nó escravo onde a tarefa do mapeador foi executada. Como tal, não é replicado no cluster Hadoop.
Além de comprimir a saída, você pode potencialmente aumentar o desempenho executando uma tarefa combinadora. Esta tática simples, mostrada aqui, envolve a realização de uma redução local da saída para tarefas de mapeador individuais.
Na maioria dos casos, nenhuma programação extra é necessária, pois você pode dizer ao sistema que use a função redutora. Se você não estiver usando sua função redutora, é necessário garantir que a saída da função do combinador seja idêntica à da função redutora.
Depende da estrutura MapReduce se a função do combinador precisa ser executada uma vez, várias vezes ou nunca, por isso é fundamental que o código do combinador garanta que os resultados finais não sejam afetados por múltiplas execuções. A execução do combinador pode render um benefício de desempenho ao diminuir a quantidade de dados intermediários que de outra forma precisariam ser transferidos pela rede.
Isso também diminui a quantidade de processamento que as tarefas redutoras deveriam fazer. Você está executando uma tarefa extra aqui, por isso é possível que qualquer ganho de desempenho seja insignificante ou pode até resultar em pior desempenho geral. Sua milhagem pode variar, então teste isso com cuidado.
Depois de todos os resultados das tarefas do mapeador serem copiados para os nós das redutoras, esses arquivos são mesclados e classificados.