O que é Join in Mapreduce?
A operação Mapreduce Join é usada para combinar dois grandes conjuntos de dados. No entanto, esse processo envolve escrever muitos códigos para realizar a operação de junção real. A união de dois conjuntos de dados começa comparando o tamanho de cada conjunto de dados. Se um conjunto de dados for menor em comparação com o outro conjunto de dados, o conjunto de dados menor será distribuído para cada nó de dados no cluster.
Depois que uma junção no MapReduce é distribuída, o Mapper ou o Redutor usa o conjunto de dados menor para realizar uma pesquisa de registros correspondentes do conjunto de dados grande e, em seguida, combina esses registros para formar os registros de saída.
Neste tutorial, você aprenderá-
- O que é um Join no MapReduce?
- Tipos de união
- Como unir dois DataSets: Exemplo de MapReduce
- O que é contador no MapReduce?
- Tipos de contadores MapReduce
- Exemplo de contadores
Tipos de união
Dependendo do lugar onde a junção real é realizada, junções no Hadoop são classificadas em-
1. Junção do lado do mapa - Quando a junção é realizada pelo mapeador, ela é chamada de junção do lado do mapa. Nesse tipo, a junção é realizada antes que os dados sejam realmente consumidos pela função de mapa. É obrigatório que a entrada para cada mapa seja na forma de uma partição e esteja em ordem de classificação. Além disso, deve haver um número igual de partições e deve ser classificado pela chave de junção.
2. Junção do lado reduzido - Quando a junção é realizada pelo redutor, ela é chamada de junção do lado reduzido. Não há necessidade nesta junção para ter um conjunto de dados em uma forma estruturada (ou particionado).
Aqui, o processamento do lado do mapa emite a chave de junção e as tuplas correspondentes de ambas as tabelas. Como efeito desse processamento, todas as tuplas com a mesma chave de junção caem no mesmo redutor que então une os registros com a mesma chave de junção.
Um fluxo de processo geral de junções no Hadoop é descrito no diagrama abaixo.
Como unir dois DataSets: Exemplo de MapReduce
Existem dois conjuntos de dados em dois arquivos diferentes (mostrado abaixo). O Key Dept_ID é comum em ambos os arquivos. O objetivo é usar MapReduce Join para combinar esses arquivos
Entrada: o conjunto de dados de entrada é um arquivo txt, DeptName.txt e DepStrength.txt
Baixe os arquivos de entrada daqui
Certifique-se de ter o Hadoop instalado. Antes de iniciar o processo real de exemplo MapReduce Join, altere o usuário para 'hduser' (id usado durante a configuração do Hadoop, você pode alternar para o ID do usuário usado durante a configuração do Hadoop).
su - hduser_
Etapa 1) Copie o arquivo zip para o local de sua escolha
Etapa 2) Descompacte o arquivo Zip
sudo tar -xvf MapReduceJoin.tar.gz
Etapa 3) Vá para o diretório MapReduceJoin /
cd MapReduceJoin/
Etapa 4) Inicie o Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Etapa 5) DeptStrength.txt e DeptName.txt são os arquivos de entrada usados para este programa de exemplo MapReduce Join.
Este arquivo precisa ser copiado para o HDFS usando o comando abaixo
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Etapa 6) Execute o programa usando o comando abaixo
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Etapa 7) Após a execução, o arquivo de saída (denominado 'part-00000') será armazenado no diretório / output_mapreducejoin no HDFS
Os resultados podem ser vistos usando a interface de linha de comando
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Os resultados também podem ser vistos por meio de uma interface da web como-
Agora selecione 'Navegar no sistema de arquivos' e navegue até / output_mapreducejoin
Parte aberta -r-00000
Os resultados são mostrados
NOTA: Observe que antes de executar este programa pela próxima vez, você precisará excluir o diretório de saída / output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
A alternativa é usar um nome diferente para o diretório de saída.
O que é contador no MapReduce?
Um contador no MapReduce é um mecanismo usado para coletar e medir informações estatísticas sobre tarefas e eventos do MapReduce. Os contadores mantêm o controle de várias estatísticas de trabalho no MapReduce, como o número de operações ocorridas e o andamento da operação. Os contadores são usados para diagnóstico de problemas no MapReduce.
Os contadores Hadoop são semelhantes a colocar uma mensagem de log no código para um mapa ou redução. Essas informações podem ser úteis para o diagnóstico de um problema no processamento de trabalho MapReduce.
Normalmente, esses contadores no Hadoop são definidos em um programa (mapear ou reduzir) e são incrementados durante a execução quando um determinado evento ou condição (específico para aquele contador) ocorre. Uma aplicação muito boa dos contadores Hadoop é rastrear registros válidos e inválidos de um conjunto de dados de entrada.
Tipos de contadores MapReduce
Existem basicamente 2 tipos de contadores MapReduce
- Contadores integrados do Hadoop : Existem alguns contadores integrados do Hadoop para cada trabalho. Abaixo estão os grupos de contadores integrados-
- MapReduce Task Counters - Coleta informações específicas da tarefa (por exemplo, número de registros de entrada) durante seu tempo de execução.
- Contadores FileSystem - coleta informações como o número de bytes lidos ou gravados por uma tarefa
- Contadores FileInputFormat - coleta informações de um número de bytes lidos por meio de FileInputFormat
- FileOutputFormat Counters - Coleta informações de um número de bytes gravados por meio de FileOutputFormat
- Contadores de trabalho - esses contadores são usados pelo JobTracker. As estatísticas coletadas por eles incluem, por exemplo, o número de tarefas lançadas para um trabalho.
- Contadores definidos pelo usuário
Além dos contadores integrados, um usuário pode definir seus próprios contadores usando funcionalidades semelhantes fornecidas por linguagens de programação. Por exemplo, em Java, 'enum' são usados para definir contadores definidos pelo usuário.
Exemplo de contadores
Um exemplo de MapClass com contadores para contar o número de valores ausentes e inválidos. Arquivo de dados de entrada usado neste tutorial Nosso conjunto de dados de entrada é um arquivo CSV, SalesJan2009.csv
public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString sales = fields[8];if (country.length() == 0) {reporter.incrCounter(SalesCounters.MISSING, 1);} else if (sales.startsWith("\"")) {reporter.incrCounter(SalesCounters.INVALID, 1);} else {output.collect(new Text(country), new Text(sales + ",1"));}}}
O trecho de código acima mostra um exemplo de implementação de contadores no Hadoop Map Reduce.
Aqui, SalesCounters é um contador definido usando 'enum' . É usado para contar registros de entrada MISSING e INVALID .
No trecho de código, se o campo 'país' tiver comprimento zero, seu valor está ausente e, portanto, o contador correspondente SalesCounters.MISSING é incrementado.
Em seguida, se o campo 'vendas' começar com " , o registro é considerado INVALID. Isso é indicado pelo incremento do contador SalesCounters.INVALID.