2009-05-20 10 views
6

¿Hay alguna manera de controlar los nombres de archivo de salida de un trabajo de Hadoop Streaming? Específicamente, me gustaría que el contenido y el nombre de los archivos de salida de mi trabajo estén organizados por ket el reductor, cada archivo solo contendría valores para una clave y su nombre sería la clave.¿Cómo controlo el nombre y el contenido de los archivos de salida de un trabajo de transmisión de Hadoop?

Actualización: Acaba de encontrar la respuesta - El uso de una clase Java que se deriva de MultipleOutputFormat como el formato de salida de trabajos permite el control de los nombres de los archivos de salida. http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

no he visto ninguna de las muestras de este por ahí ... Puede alguien señalar a una muestra de Hadoop Transmisión de que hace uso de una clase Java formato de salida personalizado?

Respuesta

8

El uso de una clase Java que se deriva de MultipleOutputFormat como el formato de salida de trabajos permite el control de los nombres de los archivos de salida. http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/MultipleOutputFormat.html

Al utilizar Hadoop Streaming, ya que sólo se admite un frasco que realmente tiene que desembolsar el frasco streaming y poner sus nuevas clases de formato de salida en el mismo para la transmisión de puestos de trabajo para poder hacer referencia a él ...

EDIT: partir de la versión 0.20.2 de hadoop esta clase ha quedado obsoleto y que ahora debe utilizar: http://hadoop.apache.org/docs/mapreduce/current/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html

+1

Enlace roto a nuevos documentos –

-1

En general, Hadoop haría que considere el directorio completo como salida y no un archivo individual. No hay forma de controlar directamente el nombre del archivo, ya sea que use Streaming o trabajos Java normales.

Sin embargo, nada le impide hacer esta división y renombrarse, una vez que el trabajo haya terminado. Puede $ HADOOP dfs -cat ruta/a/su/salida/directorio/parte- *, y canalizarlo a un script suyo que divide el contenido por claves y lo escribe en archivos nuevos.

+0

En eso es en general no es el enfoque que desea tomar. –

Cuestiones relacionadas