sql >> Base de Datos >  >> NoSQL >> HBase

Hadoop InputFormat y tipos de InputFormat en MapReduce

En nuestro anterior tutorial de Hadoop , le proporcionamos una descripción detallada de Hadoop Mapper y Reductor. Ahora, en este blog, vamos a cubrir el otro componente del proceso de MapReduce, es decir, Hadoop InputFormat.

Discutiremos qué es InputFormat en Hadoop, qué funcionalidades proporciona MapReduce InputFormat. También cubriremos los tipos de InputFormat en MapReduce y cómo obtener los datos del mapeador usando InputFormat.

¿Qué es el formato de entrada de Hadoop?

Formato de entrada de Hadoop  describe la especificación de entrada para la ejecución del trabajo Map-Reduce.

InputFormat describe cómo dividir y leer archivos de entrada. En la ejecución del trabajo de MapReduce, InputFormat es el primer paso. También es responsable de crear las divisiones de entrada y dividirlas en registros.

Los archivos de entrada almacenan los datos para el trabajo de MapReduce. Los archivos de entrada residen en HDFS . Aunque el formato de estos archivos es arbitrario, también podemos usar archivos de registro basados ​​en líneas y formato binario. Por lo tanto, en MapReduce, la clase InputFormat es una de las clases fundamentales que proporciona la siguiente funcionalidad:

  • InputFormat selecciona los archivos u otros objetos para la entrada.
  • También define las divisiones de datos. Define tanto el tamaño de las tareas de mapas individuales como su servidor de ejecución potencial.
  • Hadoop InputFormat define RecordReader. También es responsable de leer los registros reales de los archivos de entrada.

¿Cómo obtenemos los datos de Mapper?

Los métodos para obtener los datos del mapeador son:getsplits() y createRecordReader() que son los siguientes:

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 InputFormat en MapReduce

Hay diferentes tipos de MapReduce InputFormat en Hadoop que se utilizan para diferentes propósitos. Analicemos los tipos de formato de entrada de Hadoop a continuación:

1. Formato de entrada de archivo

Es la clase base para todos los formatos de entrada basados ​​en archivos. FileInputFormat también especifica el directorio de entrada que tiene la ubicación de los archivos de datos. Cuando comenzamos la ejecución de un trabajo de MapReduce, FileInputFormat proporciona una ruta que contiene archivos para leer.

Este InpuFormat leerá todos los archivos. Luego divide estos archivos en uno o más InputSplits.

2. Formato de entrada de texto

Es el formato de entrada predeterminado. Este InputFormat trata cada línea de cada archivo de entrada como un registro separado. No realiza ningún análisis. TextInputFormat es útil para datos sin formato o registros basados ​​en líneas, como archivos de registro. Por lo tanto,

  • Clave: Es el desplazamiento de bytes del comienzo de la línea dentro del archivo (no el archivo completo, una división). Por lo tanto, será único si se combina con el nombre del archivo.
  • Valor: Es el contenido de la línea. Excluye terminadores de línea.

3. Formato de entrada de texto de valor clave

Es similar a TextInputFormat. Este InputFormat también trata cada línea de entrada como un registro separado. Si bien la diferencia es que TextInputFormat trata la línea completa como el valor, pero KeyValueTextInputFormat divide la línea en clave y valor mediante un carácter de tabulación ('/t'). Por lo tanto,

  • Clave: Todo hasta el carácter de tabulación.
  • Valor: Es la parte restante de la línea después del carácter de tabulación.

4. Formato de entrada de archivo de secuencia

Es un InputFormat que lee archivos de secuencia. Los archivos de secuencia son archivos binarios. Estos archivos también almacenan secuencias de pares clave-valor binarios. Estos están comprimidos en bloque y proporcionan serialización y deserialización directa de varios datos arbitrarios. Por lo tanto,

Tanto la clave como el valor están definidos por el usuario.

5. Archivo de secuencia como formato de entrada de texto

Es la variante de SequenceFileInputFormat. Este formato convierte los valores clave del archivo de secuencia en objetos de texto. Entonces, realiza la conversión llamando a 'tostring() ' sobre las claves y los valores. Por lo tanto, SequenceFileAsTextInputFormat hace que los archivos de secuencia sean una entrada adecuada para la transmisión.

6. SequenceFileAsBinaryInputFormat

Al usar SequenceFileInputFormat, podemos extraer las claves y los valores del archivo de secuencia como un objeto binario opaco.

7. Formato de entrada de línea N

Es otra forma de TextInputFormat donde las claves están desplazadas en bytes de la línea. Y los valores son contenidos de la línea. Entonces, cada mapeador recibe un número variable de líneas de entrada con TextInputFormat y KeyValueTextInputFormat.

El número depende del tamaño de la división. Además, depende de la longitud de las líneas. Entonces, si queremos que nuestro mapeador reciba un número fijo de líneas de entrada, entonces usamos NLineInputFormat.

N- Es el número de líneas de entrada que recibe cada mapeador.

De forma predeterminada (N=1), cada mapeador recibe exactamente una línea de entrada.

Supongamos que N=2, entonces cada división contiene dos líneas. Entonces, un mapeador recibe los primeros dos pares clave-valor. Otro mapeador recibe los dos segundos pares clave-valor.

8. Formato de entrada DB

Este InputFormat lee datos de una base de datos relacional mediante JDBC. También carga pequeños conjuntos de datos, quizás para unirlos con grandes conjuntos de datos de HDFS usando MultipleInputs. Por lo tanto,

  • Clave: Escrituras largas
  • Valor: DBWritable.

Conclusión

Por lo tanto, InputFormat define cómo leer datos de un archivo en las instancias de Mapper. En este tutorial, hemos aprendido muchos tipos de InputFormat como FileInputFormat, TextInputFormat, etc.

El formato de entrada predeterminado es TextInputFormat. Si tiene alguna consulta relacionada con MapReduce InputFormat, no dude en compartirla con nosotros. Espero que los resolvamos.