Hadoop Partitioner: Saiba mais sobre introdução, sintaxe e implementação

Publicados: 2020-05-14

O 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:

  1. Primeiro, a chave que aparecer mais será enviada para uma partição
  2. 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.

Domine a tecnologia do futuro - Big Data

Programa Avançado de Certificação em Big Data do ITT Bangalore