hadoop mapreduce input-split

hadoop - Cómo leer un registro que se divide en varias líneas y también cómo manejar registros rotos durante la división de entrada



mapreduce input-split (2)

Tengo un archivo de registro como a continuación

Begin ... 12-07-2008 02:00:05 ----> record1 incidentID: inc001 description: blah blah blah owner: abc status: resolved end .... 13-07-2008 02:00:05 Begin ... 12-07-2008 03:00:05 ----> record2 incidentID: inc002 description: blah blah blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah owner: abc status: resolved end .... 13-07-2008 03:00:05

Quiero usar mapreduce para procesar esto. Y quiero extraer la identificación del incidente, el estado y también el tiempo que se tomó para el incidente

Cómo manejar los registros ya que tienen longitudes de registro variables y qué pasa si la división de entrada ocurre antes de que el registro finalice.


Tendrá que escribir su propio formato de entrada y el lector de registros para garantizar la división adecuada de archivos alrededor de su delimitador de registros.

Básicamente, su lector de registros deberá buscar su desplazamiento de bytes divididos, escanear hacia adelante (leer líneas) hasta que encuentre:

  • la línea Begin ...
    • Lea las líneas hasta el siguiente end ... línea y proporcione estas líneas entre el inicio y el final como entrada para el siguiente registro
  • Escanea el final de la división o encuentra EOF

Esto es similar en algoritmo a cómo XMLInputFormat de Mahout maneja el XML multilínea como entrada; de hecho, es posible que pueda modificar este código fuente directamente para manejar su situación.

Como se menciona en la respuesta de NLineInputFormat , NLineInputFormat es otra opción si sus registros tienen un número fijo de líneas por registro, pero es realmente ineficiente para archivos más grandes ya que tiene que abrir y leer todo el archivo para descubrir los desplazamientos de línea en getSplits() del formato de getSplits() método.