Hadoop Partitioner: Saiba mais sobre introdução, sintaxe e implementação
Publicados: 2020-05-14O objetivo fundamental deste tutorial do Hadoop Partitioner é fornecer uma definição ponto a ponto de cada parte que é utilizada no Hadoop. Neste post, abordaremos o significado do Hadoop Partitioner, a necessidade de um Partitioner no Hadoop e um caso ruim de particionamento do Hadoop.
Vamos entender o que é o Particionador Hadoop.
Índice
O que é o Particionador no Hadoop?
Um Particionador permite disseminar como as saídas vão do estágio de mapa para os redutores.
O particionador controla o segmento chave das saídas do mapa intermediário. A chave ou um subconjunto da chave é utilizado para inferir a partição por uma função de hash.
Na verdade, a estrutura do Hadoop é um particionador baseado em hash. Essa função de hash no Hadoop ajuda a derivar a partição.
A partição funciona na saída do mapeador dependendo do valor da chave. O mesmo valor de chave vai para a mesma partição dentro de cada mapeador. Após este processo, a partição final é enviada para um redutor.

A classe de uma partição decide para onde o par de chave e valor irá. A fase de particionamento fica no meio das fases de mapa e redução.
Vamos ver por que há a necessidade de um Particionador Hadoop.
Qual é a necessidade de um particionador Hadoop?
Um conjunto de dados de entrada é obtido e uma lista de pares de chave e valor é produzida na fase de trabalho da arquitetura MapReduce. Esses pares de chave e valor são formados na fase de mapa. Isso aconteceu quando os dados de entrada são divididos, que são processados por cada tarefa e mapa, produzindo uma lista de pares de chave e valor.
No entanto, a partição mapeada acontece logo antes da fase de redução, com base na chave e no valor. Dessa forma, todas as chaves de mesmo valor são agrupadas e vão para o mesmo redutor. Assim, até mesmo a distribuição da saída do mapa no redutor é garantida.
O particionamento Hadoop MapReduce permite a distribuição uniforme da saída do mapeador sobre o redutor, garantindo que a chave certa vá para o redutor certo.
Leia : Salário do desenvolvedor Hadoop na Índia
Sintaxe do Particionador de Hash no Hadoop
Aqui está a sintaxe padrão de um particionador de hash no Hadoop.
public int getPartition(chave K, valor V
int numReduceTasks)
{
return(key.hashCode() & Integer.MAX_VALUE) % numRedudeTasks;
}
Implementação do Particionador Hadoop
Para ver um exemplo do uso do Hadoop Partitioner em aplicações práticas, vejamos a tabela abaixo contendo os dados dos moradores de um bloco de um edifício.
Número do apartamento | Nome | Gênero | Membros da família | Conta de eletricidade | |
1101 | Manisha | Fêmea | 3 | 1500 | |
1102 | Deepak | Macho | 4 | 2000 | |
1103 | Sanjay | Macho | 3 | 1100 | |
1104 | Nidhi | Fêmea | 2 | 900 | |
1105 | Prateek | Macho | 1 | 650 | |
1106 | Gopal | Macho | 4 | 1800 | |
1107 | Samiksha | Fêmea | 2 | 1300 |
Agora vamos escrever um programa para encontrar a conta de luz mais alta por gênero em diferentes grupos de membros da família – 2 a 3 e abaixo de 4.

Os dados fornecidos são salvos como input.txt no diretório “/home/Hadoop/HadoopPartitioner”.
A chave segue um padrão – chave especial + nome do arquivo + número da linha. Por exemplo,
chave = entrada@1
Para isso, o valor seria
valor = 1101 \t Manisha \t Feminino \t 3 \t 1500
Veja como seria a operação:
- Valor de leitura
- Use a função split para separar os gêneros e armazená-los em uma variável de string
String[] str = value.toString().split(“\t”, -2);
String gênero = str[2];
- Agora envie informações de gênero e registre o valor dos dados como ley e par de valores para a tarefa de partição
context.write(new Text(gender), new Text(value));
- Repita para todos os registros
Como saída, você obterá os dados de gênero classificados e o valor dos dados como pares de chave e valor.
Veja como seria a tarefa do particionador.
Primeiro, o particionador receberá os pares de chave e valor enviados a ele como entrada. Agora, ele dividirá os dados em diferentes segmentos.
Entrada
chave = valor do campo de gênero
valor = valor de registro desse gênero
Veja como o processo se seguirá.
- Ler o valor do membro da família do par de valores-chave
String[] str = value.toString().split(“\t”);
int idade = Integer.parseInt(str[3]);
- Verifique o valor dos membros da família com as seguintes condições
- Familiares de 2 a 3
- Familiares com menos de 4
if(familiares<4)
{
retornar 0;
}
else if(familiares>=2 && familiares<=3)
{
return 1% numReduceTasks;
}
outro
{
return 2 % numReduceTasks;
}
Saída
Os dados dos pares de chave e valor serão segmentados nas três coleções fornecidas.
Aprenda também: As melhores ferramentas do Hadoop que você deve conhecer
Particionamento ruim e superando-o
Vamos supor que você possa prever que uma das chaves em seus dados de entrada aparecerá mais do que qualquer outra chave. Portanto, você pode precisar enviar todas as suas chaves (um número enorme) para uma partição e depois distribuir as chaves restantes por todas as outras partições por seu hashCode().
Então, agora você tem dois mecanismos de envio de informações para partições:
- Primeiro, a chave que aparecer mais será enviada para uma partição
- Em segundo lugar, todas as chaves restantes serão enviadas para partições de acordo com seu hashCode().
Agora, digamos que sua técnica hashCode() não esteja distribuindo adequadamente as outras chaves pelas partições. Assim, a informação não circula igualmente em partições e redutores. Isso ocorre porque cada partição é proporcional a um redutor.

Assim, certos redutores terão maiores quantidades de dados do que outros redutores. Portanto, os redutores restantes terão que esperar por um redutor (um com chaves definidas pelo usuário) devido à carga em mãos.
Nesse caso, você deve seguir uma metodologia que compartilhe os dados entre diferentes redutores. Saiba mais sobre o Hadoop com nosso tutorial definitivo do Hadoop.
Conclusão
Esperamos que este guia sobre particionadores do Hadoop tenha sido útil para você. Para mais informações sobre este assunto, entre em contato com os especialistas da upGrad, e nós o ajudaremos a navegar.
Se você estiver interessado em saber mais sobre Big Data, confira nosso programa PG Diploma in Software Development Specialization in Big Data, projetado para profissionais que trabalham e fornece mais de 7 estudos de caso e projetos, abrange 14 linguagens e ferramentas de programação, práticas práticas workshops, mais de 400 horas de aprendizado rigoroso e assistência para colocação de emprego com as principais empresas.
Aprenda cursos de desenvolvimento de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.
