Em nosso tutorial Hadoop anterior , fornecemos uma descrição detalhada do Hadoop Mapper e Redutor. Agora, neste blog, vamos cobrir o outro componente do processo MapReduce, ou seja, Hadoop InputFormat.
Discutiremos o que é InputFormat no Hadoop, quais funcionalidades são fornecidas pelo MapReduce InputFormat. Também abordaremos os tipos de InputFormat no MapReduce e como obter os dados do mapeador usando o InputFormat.
O que é o Hadoop InputFormat?
Formato de entrada do Hadoop descreve a especificação de entrada para execução do trabalho Map-Reduce.
InputFormat descreve como dividir e ler arquivos de entrada. Na execução do trabalho MapReduce, InputFormat é a primeira etapa. Também é responsável por criar as divisões de entrada e dividi-las em registros.
Os arquivos de entrada armazenam os dados para o trabalho MapReduce. Os arquivos de entrada residem em HDFS . Embora o formato desses arquivos seja arbitrário, também podemos usar arquivos de log baseados em linha e formato binário. Portanto, no MapReduce, a classe InputFormat é uma das classes fundamentais que fornece a funcionalidade abaixo:
- InputFormat seleciona os arquivos ou outros objetos para entrada.
- Também define as divisões de dados. Ele define o tamanho das tarefas individuais do Maps e o possível servidor de execução.
- O Hadoop InputFormat define o RecordReader. Ele também é responsável por ler os registros reais dos arquivos de entrada.
Como obtemos os dados do Mapper?
Os métodos para obter os dados do mapeador são:getsplits() e createRecordReader() que são os seguintes:
public abstract class InputFormat<K, V> { public abstract List<InputSplit> getSplits(JobContext context) throws IOException, InterruptedException; public abstract RecordReader<K, V> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException; }
Tipos de formato de entrada no MapReduce
Existem diferentes tipos de MapReduce InputFormat no Hadoop que são usados para diferentes propósitos. Vamos discutir os tipos InputFormat do Hadoop abaixo:
1. Formato de entrada de arquivo
É a classe base para todos os InputFormats baseados em arquivo. FileInputFormat também especifica o diretório de entrada que possui a localização dos arquivos de dados. Quando iniciamos a execução de uma tarefa MapReduce, FileInputFormat fornece um caminho contendo os arquivos a serem lidos.
Este InpuFormat lerá todos os arquivos. Em seguida, ele divide esses arquivos em um ou mais InputSplits.
2. TextInputFormat
É o formato de entrada padrão. Este InputFormat trata cada linha de cada arquivo de entrada como um registro separado. Ele não executa nenhuma análise. TextInputFormat é útil para dados não formatados ou registros baseados em linha, como arquivos de log. Conseqüentemente,
- Chave – É o deslocamento de byte do início da linha dentro do arquivo (não o arquivo inteiro uma divisão). Portanto, será único se combinado com o nome do arquivo.
- Valor – É o conteúdo da linha. Exclui terminadores de linha.
3. KeyValueTextInputFormat
É semelhante ao TextInputFormat. Esse InputFormat também trata cada linha de entrada como um registro separado. Enquanto a diferença é que TextInputFormat trata a linha inteira como o valor, mas o KeyValueTextInputFormat quebra a própria linha em chave e valor por um caractere de tabulação ('/t'). Conseqüentemente,
- Chave – Tudo até o caractere de tabulação.
- Valor – É a parte restante da linha após o caractere de tabulação.
4. SequenceFileInputFormat
É um InputFormat que lê arquivos de sequência. Arquivos de sequência são arquivos binários. Esses arquivos também armazenam sequências de pares binários de chave-valor. Eles são compactados em bloco e fornecem serialização direta e desserialização de vários dados arbitrários. Conseqüentemente,
Chave e valor ambos são definidos pelo usuário.
5. SequenceFileAsTextInputFormat
É a variante de SequenceFileInputFormat. Esse formato converte os valores de chave do arquivo de sequência em objetos de texto. Então, ele realiza a conversão chamando ‘tostring() ’ nas chaves e valores. Portanto, SequenceFileAsTextInputFormat torna os arquivos de sequência adequados para a entrada de streaming.
6. SequenceFileAsBinaryInputFormat
Usando SequenceFileInputFormat podemos extrair as chaves e valores do arquivo de sequência como um objeto binário opaco.
7. NlineInputFormat
É outra forma de TextInputFormat onde as chaves são o deslocamento de byte da linha. E os valores são conteúdos da linha. Assim, cada mapeador recebe um número variável de linhas de entrada com TextInputFormat e KeyValueTextInputFormat.
O número depende do tamanho da divisão. Além disso, depende do comprimento das linhas. Então, se quiser que nosso mapeador receba um número fixo de linhas de entrada, usamos NLineInputFormat.
N- É o número de linhas de entrada que cada mapeador recebe.
Por padrão (N=1), cada mapeador recebe exatamente uma linha de entrada.
Suponha que N=2, então cada divisão contém duas linhas. Assim, um mapeador recebe os dois primeiros pares de valores-chave. Outro mapeador recebe os dois segundos pares de valores-chave.
8. DBInputFormat
Este InputFormat lê dados de um banco de dados relacional, usando JDBC. Ele também carrega pequenos conjuntos de dados, talvez para unir grandes conjuntos de dados do HDFS usando MultipleInputs. Conseqüentemente,
- Chave – LongWritables
- Valor – DBWritables.
Conclusão
Portanto, InputFormat define como ler dados de um arquivo nas instâncias do Mapper. Neste tutorial, aprendemos muitos tipos de InputFormat como FileInputFormat, TextInputFormat etc.
O formato de entrada padrão é TextInputFormat. Se você tiver alguma dúvida relacionada ao MapReduce InputFormat, sinta-se à vontade para compartilhar conosco. Espero que vamos resolvê-los.