no primeiro post da série Hadoop introdução do Hadoop e execução de um programa map-reduce, expliquei os fundamentos do Map-Reduce. Neste post, estou explicando seus diferentes componentes, como particionamento, Shuffle, Combinador, mesclagem, classificação primeiro e depois como funciona.
Particionamento:
Se o número de redutores são 2 e a função de hash é:
#This function would return the data passes in itfunction hash(data){#this is just for example purposereturn data;}
em seguida, para a chave 1:
número da partição = hash(1) % 2 = 1;
chave 2:
número da partição = hash(2) % 2 = 0;
chave 4:
número da partição = hash(4) % 2 = 0;
isso significa Que a saída para a chave 1 deve ir em partition_1 e saída para a chave 2 e 4 deve ir em partition_0.
Shuffle:
na saída final da tarefa do mapa, pode haver várias partições e essas partições devem ir para diferentes tarefas de redução. Embaralhar é basicamente Transferir partições de saída do mapa para as tarefas de redução correspondentes. Map task notificou o mestre do aplicativo sobre a conclusão da tarefa do mapa e o mestre do aplicativo notifica o redutor correspondente para copiar a saída do mapa na máquina de redução.
Combinador:
Classificação:
é apenas classificar os dados com base em chaves.
mesclagem:
isso acontece no lado do redutor. O Reducer pode obter dados de várias tarefas de mapa e, por meio da fusão, mescla os dados de diferentes tarefas de mapa em uma única unidade, mantendo a ordem de classificação.
Mapa-reduzir em detalhes:
Mapa:
tem um na memória circular buffer
e grava diretamente no buffer. Quando o buffer atinge o valor Limite (padrão 80%), ele começa a gravar para spill file
por meio de um background thread
separado. A tarefa do mapa ainda pode gravar sua saída no buffer enquanto o thread de fundo está em execução. Antes de gravar no arquivo spill, a saída do mapa que é pares de valor-chave é particionada e classificada. Se um combinador estiver lá, ele também será executado para reduzir o tamanho da saída.
após a tarefa, todos os arquivos de derramamento são classificados novamente e um único arquivo é criado, que é particionado e classificado. Significa que este arquivo de saída final tem várias partições. Após a tarefa do mapa concluída para um nó, sua saída é enviada para o redutor. É por isso que você vê reduzir tarefa mais de 0%, enquanto mapa é inferior a <100%.
quando você tem uma tarefa somente de mapa, não há embaralhamento, o que significa que os mapeadores gravarão a saída final diretamente no HDFS.
reduzir:
depois de obter dados da tarefa do mapa, ele mescla os dados em uma única unidade durante o merge phase
. Em vez de mesclar diretamente todos os arquivos em um, ele usa o conceito para merge factor
, cujo objetivo é minimizar a quantidade de dados gravados no disco. Em seguida, durante a fase de redução, a função de redução é invocada para cada tecla na saída classificada. A saída desta fase é gravada diretamente no sistema de arquivos de saída, normalmente HDFS.
links úteis:
introdução e trabalho de fios