2012-06-29 30 views
5

Tengo un trabajo Elastic Map Reduce que está escribiendo algunos archivos en S3 y quiero concatenar todos los archivos para producir un archivo de texto único.¿Es posible ejecutar hadoop fs -getmerge en S3?

Actualmente estoy copiando manualmente la carpeta con todos los archivos a nuestros HDFS (fs hadoop copyFromLocal), entonces yo estoy corriendo hadoop FS y FS -getmerge hadoop copyToLocal para obtener el archivo.

¿Hay alguna forma de utilizar hadoop fs directamente en S3?

Respuesta

1

En realidad, esta respuesta sobre getmerge es incorrecta. getmerge espera un destino local y no funcionará con S3. Lanza un IOException si lo intentas y responde con -getter: Wrong FS :.

Uso:

hadoop fs [generic options] -getmerge [-nl] <src> <localdst> 
0

No he probado personalmente el comando getmerge, pero los comandos hadoop fs en los nodos del clúster EMR admiten rutas S3 al igual que las rutas HDFS. Por ejemplo, se puede SSH en el nodo principal del clúster y ejecute:

hadoop fs -ls s3://<my_bucket>/<my_dir>/ 

El comando anterior mostrará una lista de todos los objetos S3 en virtud de la ruta del directorio especificado.

Espero que hadoop fs -getmerge funcione de la misma manera. Por lo tanto, solo use las rutas S3 completas (comenzando con s3: //) en lugar de las rutas HDFS.

+0

'fs Hadoop -getmerge' sólo pueden fusionarse para el sistema de archivos local, no s3 – justderb

1

Una manera fácil (si está generando un archivo pequeño que cabe en la máquina maestra) es hacer lo siguiente:

  1. Combinar las partes del archivo en un solo archivo en la máquina local (Documentation)

    hadoop fs -getmerge hdfs://[FILE] [LOCAL FILE] 
    
  2. Copia el archivo de resultados a S3, y elimine el archivo local (Documentation)

    hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file 
    
Cuestiones relacionadas