Junção e contador do Hadoop MapReduce com exemplo
O que é ingressar no Mapreduce?
Associação Mapreduce A operação é usada para combinar dois grandes conjuntos de dados. No entanto, esse processo envolve escrever muito código 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 outro conjunto de dados, um 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 por registros correspondentes do conjunto de dados grande e, em seguida, combina esses registros para formar registros de saída.
Tipos de Junção
Dependendo do local onde a junção real é realizada, as junções no Hadoop são classificadas em-
1. Junção no lado do mapa – Quando a junção é realizada pelo mapeador, ela é chamada de junção do lado do mapa. Neste tipo, a junção é executada antes que os dados sejam realmente consumidos pela função de mapa. É obrigatório que a entrada para cada mapa esteja na forma de uma partição e 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 lateral reduzida – Quando a junção é realizada pelo redutor, ela é chamada de junção lateral reduzida. Não há necessidade nesta junção de ter um conjunto de dados de forma estruturada (ou particionada).
Aqui, o processamento do lado do mapa emite a chave de junção e as tuplas correspondentes de ambas as tabelas. Como efeito deste 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 geral do processo de junções no Hadoop é representado no diagrama abaixo.
Como juntar dois conjuntos de dados: exemplo de MapReduce
Existem dois conjuntos de dados em dois arquivos diferentes (mostrados abaixo). O Key Dept_ID é comum em ambos os arquivos. O objetivo é usar o 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 começar com o processo real de exemplo do MapReduce Join, altere o usuário para 'hduser' (id usado durante a configuração do Hadoop, você pode mudar para o ID do usuário usado durante a configuração do Hadoop).
su - hduser_
Passo 1) Copie o arquivo zip para o local de sua escolha
Passo 2) Descompacte o arquivo Zip
sudo tar -xvf MapReduceJoin.tar.gz
Passo 3) Vá para o diretório MapReduceJoin/
cd MapReduceJoin/
Passo 4) Inicie o Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Passo 5) DeptStrength.txt e DeptName.txt são os arquivos de entrada usados para este programa de exemplo MapReduce Join.
Esses arquivos precisam ser copiados para HDFS usando o comando abaixo-
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Passo 6) Execute o programa usando o comando abaixo-
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Passo 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 da linha de comando
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Os resultados também podem ser vistos através de uma interface web como-
Agora selecione 'Navegar no sistema de arquivos' e navegue até /output_mapreducejoin
Abra parte-r-00000
Os resultados são mostrados
OBSERVAÇÃO: 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?
A Contador no MapReduce é um mecanismo usado para coletar e medir informações estatísticas sobre trabalhos 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 progresso 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. Esta informação pode ser útil para diagnosticar um problema no processamento do 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 ocorre um evento ou condição específica (específica desse contador). 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 MapaReduzir contadores
- Contadores integrados do Hadoop:Existem alguns contadores Hadoop integrados que existem por trabalho. Abaixo estão os grupos de contadores integrados-
- Contadores de tarefas MapReduce – Coleta informações específicas da tarefa (por exemplo, número de registros de entrada) durante seu tempo de execução.
- Contadores do sistema de arquivos – Coleta informações como número de bytes lidos ou escritos por uma tarefa
- Contadores FileInputFormat – Coleta informações de um número de bytes lidos através de FileInputFormat
- Contadores FileOutputFormat – Coleta informações de um número de bytes escritos através de FileOutputFormat
- Contadores de trabalho – Esses contadores são usados pelo JobTracker. As estatísticas recolhidas 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 pelo 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, VendasJan2009.csv
public static class MapClass extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> { static enum SalesCounters { MISSING, INVALID }; public void map ( LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException { //Input string is split using ',' and stored in 'fields' array String fields[] = value.toString().split(",", -20); //Value at 4th index is country. It is stored in 'country' variable String country = fields[4]; //Value at 8th index is sales data. It is stored in 'sales' variable String 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, Contadores de vendas é um contador definido usando 'enum'. É usado para contar FALTA e INVÁLIDO registros de entrada.
No trecho de código, se 'país' campo tem comprimento zero, então seu valor está faltando e, portanto, o contador correspondente SalesCounters.MISSING é incrementado.
Em seguida, se 'vendas' campo começa com um " então o registro é considerado INVÁLIDO. Isto é indicado pelo incremento do contador SalesCounters.INVÁLIDO.