-put
e -copyFromLocal
sono documentati come identici, mentre la maggior parte degli esempi utilizza la variante verbose -copyFromLocal. Perché?Differenza tra hadoop fs -put e hadoop fs -copyFromLocal
Stessa cosa per -get
e -copyToLocal
-put
e -copyFromLocal
sono documentati come identici, mentre la maggior parte degli esempi utilizza la variante verbose -copyFromLocal. Perché?Differenza tra hadoop fs -put e hadoop fs -copyFromLocal
Stessa cosa per -get
e -copyToLocal
Quindi, in pratica si può fare con mettere, tutto quello che si fa con copyFromLocal, ma non viceversa.
Allo stesso modo,
Quindi, è possibile utilizzare ottenere invece di copyToLocal, ma non viceversa.
Riferimento: Hadoop's documentation.
Aggiornamento: per l'ultimo a ottobre 2015, vedere la risposta this di seguito.
Facciamo un esempio: Se il HDFS contiene il percorso: /tmp/dir/abc.txt
E se il vostro disco locale contiene anche questa strada quindi l'API HDFS non saprà quale vuoi dire, se non si specifica uno schema simile file://
o hdfs://
. Forse scegli il percorso che non volevi copiare.
Pertanto si ha -copyFromLocal
che impedisce di copiare accidentalmente il file errato, limitando il parametro assegnato al file system locale.
Put
è per gli utenti più esperti che conoscono quale schema mettere di fronte.
È sempre un po 'di confusione per i nuovi utenti di Hadoop quali sono i filesystem in cui si trovano attualmente e dove sono effettivamente i loro file.
Cosa intendi da "l'API hdfs non saprà quale intendi"? Per "-put" la fonte è sempre il primo argomento. O vuoi dire che alcuni utenti potrebbero confondere '-put' con '-get'? – snappy
No, nessuno dei due modi. Stiamo parlando di due diversi file system qui. HDFS e file system locale (ad esempio ext4). Usando 'bin/hadoop fs -put/tmp/somepath/user/hadoop/somepath' il comando in realtà non sa se'/tmp/somepath' esiste in entrambi i filesystem, o solo nel filesystem locale. Stessa cosa con il percorso di destinazione. –
Quindi il primo parametro non è sempre un percorso fs locale, per così dire. Puoi "mettere" da un HDFS a un altro, se lo desideri. '-copyFromLocal' farà in modo che prelevi dal disco locale e carichi su HDFS. –
copyFromLocal
è limitato a copiare da locale mentre put
può prendere file da qualsiasi (altri HDFS/filesystem locale/..)Nonostante quanto sostenuto dalla documentazione , a partire da ora (ottobre 2015), sia -copyFromLocal
e -put
sono gli stessi.
Dalla guida in linea:
[[email protected] ~]$ hdfs dfs -help copyFromLocal
-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst> :
Identical to the -put command.
E questo è confermato dal looking at the sources, dove si può vedere che la classe CopyFromLocal estende la classe Put, ma senza aggiungere alcun nuovo comportamento:
public static class CopyFromLocal extends Put {
public static final String NAME = "copyFromLocal";
public static final String USAGE = Put.USAGE;
public static final String DESCRIPTION = "Identical to the -put command.";
}
public static class CopyToLocal extends Get {
public static final String NAME = "copyToLocal";
public static final String USAGE = Get.USAGE;
public static final String DESCRIPTION = "Identical to the -get command.";
}
Come puoi notare, questo è esattamente lo stesso per get
/copyToLocal
.
Entrambi i comandi 'put' & 'copyFromLocal' funzionano esattamente allo stesso modo. Non è possibile utilizzare il comando 'put' per copiare i file da una directory hdfs a un'altra. Vediamolo con un esempio: diciamo che la tua root ha due directory, chiamate 'test1' e 'test2'. Se 'test1' contiene un file 'customer.txt' e si prova a copiarlo nella directory test2
$ hadoop fs -put /test1/customer.txt/test2 Ciò causerà 'nessun errore di file o directory' dal ' mettere 'cercherà il file nel file system locale e non hdfs. Entrambi sono pensati per copiare solo file (o directory) dal file system locale a hdfs.
Forse se specifichi il filesystem nel primo argomento, non leggerà il locale? 'hadoop fs -put hdfs: ///test1/customer.txt hdfs: /// test2'? –
si prega di controllare questo collegamento che ha menzionato i dettagli nel livello di codice sorgente http://hakunamapdata.com/why-put-is-better-than-copyfromlocal-when-coping-files-to-hdfs/ –