hadoop - descarga - hdfs commands
Diferencia entre hadoop fs-put y hadoop fs-copyFromLocal (5)
-put
y -copyFromLocal
se documentan como idénticos, mientras que la mayoría de los ejemplos usan la variante verbose -copyFromLocal. ¿Por qué?
Lo mismo para -get
y -copyToLocal
A pesar de lo que afirma la documentación, a partir de ahora (octubre de 2015), tanto -copyFromLocal
como -put
son los mismos.
De la ayuda en línea:
[cloudera@quickstart ~]$ hdfs dfs -help copyFromLocal
-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst> :
Identical to the -put command.
Y esto se confirma al mirar las fuentes , donde se puede ver que la clase CopyFromLocal amplía la clase Put, pero sin agregar ningún comportamiento nuevo:
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.";
}
Como puede notar, esto es exactamente lo mismo para get
/ copyToLocal
.
Hagamos un ejemplo: si su HDFS contiene la ruta: /tmp/dir/abc.txt
Y si su disco local también contiene esta ruta, la API de hdfs no sabrá a cuál se refiere, a menos que especifique un esquema como file://
o hdfs://
. Quizás escoja el camino que no quisiste copiar.
Por lo tanto, tiene -copyFromLocal
que le impide copiar accidentalmente el archivo incorrecto, al limitar el parámetro que le da al sistema de archivos local.
Put
es para usuarios más avanzados que saben qué esquema poner delante.
Siempre es un poco confuso para los nuevos usuarios de Hadoop en qué sistema de archivos se encuentran actualmente y dónde están realmente sus archivos.
Los comandos ''put'' y ''copyFromLocal'' funcionan exactamente igual. No puede usar el comando ''poner'' para copiar archivos de un directorio hdfs a otro. Veamos esto con un ejemplo: digamos que tu raíz tiene dos directorios, llamados ''test1'' y ''test2''. Si ''test1'' contiene un archivo ''customer.txt'' e intenta copiarlo en el directorio test2
$ hadoop fs -put /test1/customer.txt / test2 Esto dará como resultado el error ''no hay tal archivo o directorio'' ya que ''put'' buscará el archivo en el sistema de archivos local y no en hdfs. Ambos están destinados a copiar archivos (o directorios) desde el sistema de archivos local a hdfs, únicamente.
- ambos son iguales excepto
-
copyFromLocal
está restringido para copiar desde local, mientras queput
puede tomar archivos de cualquier (otros hdfs / sistema de archivos local / ..)
- copyFromLocal es similar al comando put , excepto que el origen está restringido a una referencia de archivo local .
Entonces, básicamente puedes hacer con put , todo lo que haces con copyFromLocal , pero no al revés.
Similar,
- copyToLocal es similar al comando get , excepto que el destino está restringido a una referencia de archivo local .
Por lo tanto, puede usar get en lugar de copyToLocal , pero no al revés.
Referencia : documentación de Hadoop .
Actualización : para la última fecha de octubre de 2015, vea this respuesta a continuación.