Подтвердить что ты не робот

Разница между hasoop fs -put и hadoop fs -copyFromLocal

-put и -copyFromLocal документируются как идентичные, в то время как в большинстве примеров используется подробный вариант -copyFromLocal. Почему?

То же самое для -get и -copyToLocal

4b9b3361

Ответ 1

  • copyFromLocal похож на команду put, за исключением того, что источник ограничен локальной ссылкой.

Итак, в основном вы можете сделать это с помощью всего, что вы делаете с copyFromLocal, но не наоборот.

Аналогично,

  • copyToLocal похож на команду get, за исключением того, что назначение ограничено ссылкой локального файла.

Следовательно, вы можете использовать get вместо copyToLocal, но не наоборот.

Ссылка: Документация Hadoop.

Обновление. Последнее обновление с октября 2015 года см. ниже .

Ответ 2

Сделайте пример: Если ваш HDFS содержит путь: /tmp/dir/abc.txt И если ваш локальный диск также содержит этот путь, то API hdfs не будет знать, что вы имеете в виду, если не указать такую ​​схему, как file:// или hdfs://. Возможно, он выбирает путь, который вы не хотите копировать.

Поэтому у вас есть -copyFromLocal, который предотвращает случайное копирование неправильного файла, ограничивая параметр, который вы даете локальной файловой системе.

Put предназначен для более продвинутых пользователей, которые знают, какую схему поставить впереди.

Это всегда немного запутывает новых пользователей Hadoop, в которых они находятся в настоящее время и где находятся их файлы.

Ответ 3

Несмотря на то, что заявлено в документации, на данный момент (октябрь 2015 г.) оба -copyFromLocal и -put совпадают.

В интерактивной справке:

[[email protected] ~]$ hdfs dfs -help copyFromLocal 
-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst> :
  Identical to the -put command.

И это подтверждается в отношении источников, где вы можете видеть, что класс CopyFromLocal расширяет класс Put, но без добавления каких-либо новых поведение:

  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.";
  }

Как вы могли заметить, это точно так же для get/copyToLocal.

Ответ 4

  • оба одинаковы, кроме
  • copyFromLocal ограничивается копией с локального, а put может брать файл из любого (другой hdfs/local filesystem/..)

Ответ 5

Команды "put" и "copyFromLocal" работают точно так же. Вы не можете использовать команду "put" для копирования файлов из одного каталога hdfs в другой. Давайте посмотрим на это с примером: скажем, ваш корень имеет две директории с именем "test1" и "test2". Если "test1" содержит файл "customer.txt", и вы пытаетесь скопировать его в каталог test2
 $ hadoop fs -put/test1/customer.txt/test2 Это приведет к ошибке "нет такого файла или каталога", поскольку "put" будет искать файл в локальной файловой системе, а не hdfs. Они предназначены только для копирования файлов (или каталогов) из локальной файловой системы в hdfs.