En mi trabajo, tengo la necesidad de analizar muchos registros históricos. Los clientes individuales (hay miles) pueden tener cientos de subdirectorios de registro desglosados por fecha. Por ejemplo:¿Pasar directorios no archivos a hadoop-streaming?
- logs/Customer_One/2011-01-02-001
- logs/Customer_One/2012-02-03-001
- logs/Customer_One/2012-02-03-002
- logs/Customer_Two/2009-03-03-001
- logs/Customer_Two/2009-03-03-002
Cada conjunto de registro individual puede ser en sí mismo cinco o seis niveles de profundidad y contienen miles de archivos.
Por lo tanto, realmente quiero que los trabajos de mapas individuales se manejen recorriendo los subdirectorios: ¡simplemente enumerar archivos individuales es parte de mi problema de computación distribuida!
Desafortunadamente, cuando intento pasar un directorio que contiene solo subdirectorios de registro a Hadoop, se queja de que no puedo pasar esos subdirectorios a mi asignador. (Una vez más, he escrito a aceptar como entrada subdirectorios):
$ hadoop jar "${HADOOP_HOME}/contrib/streaming/hadoop-streaming-${HADOOP_VERSION}.jar" -input file:///mnt/logs/Customer_Name/ -file mapper.sh -mapper "mapper.sh" -file reducer.sh -reducer "reducer.sh" -output .
[ . . . ]
12/04/10 12:48:35 ERROR security.UserGroupInformation: PriviledgedActionException as:cloudera (auth:SIMPLE) cause:java.io.IOException: Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003 12/04/10 12:48:35 ERROR streaming.StreamJob: Error Launching job : Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003 Streaming Command Failed! [[email protected] ~]$
¿Hay una manera fácil de convencer a Hadoop-streaming de que me permita asignar directorios como elementos de trabajo?
wildcarding/globs debería funcionar, intente '-input file: /// mnt/logs/Customer _ */**/*. Log' –
Globos no es la respuesta: Primero, encontraría solo archivos en un dado nivel en el árbol de directorios en lugar de niveles múltiples; segundo, como describí originalmente, el número de directorios y subdirectorios es enorme (de hecho, mucho más allá de los reinos de un shell para expandir sin xargs) y el tiempo para recorrer ese árbol es exactamente parte del problema que quiero distribuir. (Realizar solo los globbing de los que está hablando tomaría días, literalmente, con 1 ms rt). –
Por un momento tuve algún recuerdo de que hadoop admitía globs recursivos con la notación de doble estrella (**), pero una prueba rápida en mi consola dice lo contrario –