2011-04-18 13 views

Respuesta

2

DistCp es, de hecho, solo un trabajo regular de reducción de mapas: puede utilizar la misma sintaxis globbing que usaría para la entrada de un trabajo normal de reducción de mapas. En general, puede usar foo/*.log y eso debería ser suficiente. Puede experimentar con la instrucción hadoop fs -ls aquí - si el globbing funciona con fs -ls, entonces si funcionará con DistCp (bueno, casi, pero las diferencias son bastante sutiles de mencionar).

+4

Parece que no funciona con s3n: // paths. Hadoop -ls funciona con s3n: // comodines, aunque ... raro. –

+1

Esta pregunta es de 2011, ¿hubo algún cambio para habilitar distcp con comodines? – Dimitry

+0

La versión 2 admite comodines, documento aquí: https://hadoop.apache.org/docs/r1.2.1/distcp2.html –

12

Me doy cuenta de que este es un hilo viejo. Pero yo también estaba interesado en la respuesta a esta pregunta, y dk89 también me preguntó nuevamente en 2013. Así que aquí vamos:

distcp no admite comodines. Lo más cerca que se puede hacer es:

encontrar los archivos que desea copiar (fuentes), el filtro y luego usando grep, formato para hdfs usando awk, y enviar el resultado a un "insumo-archivos" lista:

hadoop dfs -lsr hdfs://localhost:9000/path/to/source/dir/ 
    | grep -e webapp.log.3. | awk '{print "hdfs\://localhost\:9000/" $8'} > input-files.txt 

Ponga la lista de entrada-archivos en hdfs

hadoop dfs -put input-files.txt . 

Crear el directorio de destino

hadoop dfs -mkdir hdfs://localhost:9000/path/to/target/ 

Run distcp utilizando la lista de archivos de entrada y especificando el directorio hdfs de destino:

hadoop distcp -i -f input-files.txt hdfs://localhost:9000/path/to/target/