2012-06-29 10 views
5

Ho un lavoro di riduzione della mappa elastica che sta scrivendo alcuni file in S3 e voglio concatenare tutti i file per produrre un file di testo univoco.È possibile eseguire hadoop fs -getmerge in S3?

Attualmente sto copiando manualmente la cartella con tutti i file sul nostro HDFS (hadoop fs copyFromLocal), quindi eseguo hadoop fs -getmerge e hadoop fs copyToLocal per ottenere il file.

c'è comunque l'uso di hadoop fs direttamente su S3?

risposta

1

In realtà, questa risposta su getmerge non è corretta. getmerge si aspetta una destinazione locale e non funzionerà con S3. Genera un IOException se provi a rispondere con -getmerge: Wrong FS :.

Usage:

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

Non ho provato personalmente il comando getmerge ma i comandi hadoop fs sui nodi cluster EMR supportano i percorsi S3 come i percorsi HDFS. Ad esempio, è possibile SSH il nodo principale del cluster ed eseguire:

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

Il comando sopra elencherà di tutti gli oggetti S3 sotto il percorso della directory specificata.

Mi aspetto che lo hadoop fs -getmerge funzioni allo stesso modo. Quindi, basta usare i percorsi S3 completi (a partire da s3: //) invece dei percorsi HDFS.

+0

'fs Hadoop -getmerge' può unire solo al file system locale, non s3 – justderb

1

Un modo semplice (se si sta generando un piccolo file che si inserisce sulla macchina master) è quello di effettuare le seguenti operazioni:

  1. Unire le parti di file in un singolo file sulla macchina locale (Documentation)

    hadoop fs -getmerge hdfs://[FILE] [LOCAL FILE] 
    
  2. Copiare il file dei risultati di S3, e quindi eliminare il file locale (Documentation)

    hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file 
    
Problemi correlati