В чем разница между командами оболочки «hadoop fs» и командами оболочки «hdfs dfs»?


109

Они должны быть равными?

но почему команды " hadoop fs" показывают, hdfs filesа команды " hdfs dfs" показывают локальные файлы?

вот информация о версии hadoop:

Hadoop 2.0.0-mr1-cdh4.2.1 Subversion git: //ubuntu-slave07.jenkins.cloudera.com/var/lib/jenkins/workspace/CDH4.2.1-Packaging-MR1/build/cdh4/mr1/2.0.0 -mr1-cdh4.2.1 / source -r Скомпилировано jenkins в понедельник, 22 апреля, 10:48:26 PDT 2013


1
Я неправильно задаю этот вопрос. hdfs dfsпоказать HDFS файлы тоже.
Чарли Лин

2
Возможный дубликат разницы между `hadoop dfs` и` hadoop fs`
TechDog

Ответы:


140

Ниже приведены три команды, которые выглядят одинаково, но имеют незначительные различия.

  1. hadoop fs {args}
  2. hadoop dfs {аргументы}
  3. hdfs dfs {аргументы}

  hadoop fs <args>

FS относится к общей файловой системе, которая может указывать на любые файловые системы, такие как локальные, HDFS и т. Д. Таким образом, это можно использовать, когда вы имеете дело с различными файловыми системами, такими как Local FS, (S) FTP, S3 и другими.


  hadoop dfs <args>

dfs очень специфичен для HDFS. будет работать, если операция относится к HDFS. Это устарело, и вместо этого мы должны использовать hdfs dfs .


  hdfs dfs <args>

то же, что и 2nd, т.е. будет работать для всех операций, связанных с HDFS, и является рекомендуемой командой вместо То hadoop dfs

ниже приведен список, классифицированный как hdfsкоманды.

  namenode|secondarynamenode|datanode|dfs|dfsadmin|fsck|balancer|fetchdt|oiv|dfsgroups

Таким образом, даже если вы используете hadoop dfs , он будет искать hdfs и делегировать эту команду hdfs dfs


5
Интересный :-). Итак, если это hadoop fsотносится к какой-либо файловой системе, например, локальной или hdfs, как hadoop выбрать отображение содержимого корневого каталога HDFS, когда я это сделаю hadoop fs -ls /? Кроме того, как я могу указать hadoop показывать содержимое моего локального корневого каталога при запуске hadoop fs -ls /команды?
sgsi

8
Вы можете ссылаться на локальную FS, используя fileсхему в URI, переданных в качестве аргумента hadoop fsкомандам (например hdoop fs -ls file:///). Если ничего не сказано, по умолчанию используется hdfsсхема AFAIK ( hdoop fs -ls /== hadoop fs -ls hdfs:///).
пт

2
А зачем мне это нужно hadoop fs -ls file:///, если есть более традиционные способы листинга локальных файлов?
srctaha

почему отказ от «hadoop» в пользу «hdfs»? Есть ли функциональная разница или это просто изменение синтаксиса?
Shuklaswag

31

введите описание изображения здесь

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html

Оболочка файловой системы (FS) включает в себя различные команды, подобные оболочке, которые напрямую взаимодействуют с распределенной файловой системой Hadoop (HDFS), а также с другими файловыми системами, поддерживаемыми Hadoop, такими как Local FS, WebHDFS, S3 FS и другие.

bin / hadoop fs <args>

Все команды оболочки FS принимают URI пути в качестве аргументов. Формат URI - схема: // полномочия / путь. Для HDFS схема - hdfs, а для локальной FS - файловая. Схема и полномочия не являются обязательными. Если не указано, используется схема по умолчанию, указанная в конфигурации. Файл или каталог HDFS, например / parent / child, можно указать как hdfs: // namenodehost / parent / child или просто как / parent / child (при условии, что ваша конфигурация настроена так, чтобы указывать на hdfs: // namenodehost).

Большинство команд в оболочке FS ведут себя как соответствующие команды Unix. Различия описаны для каждой из команд. Информация об ошибке отправляется на stderr, а вывод отправляется на stdout.

Если используется HDFS,

hdfs dfs

это синоним.


5

fs относится к любой файловой системе, она может быть локальной или HDFS, но dfs относится только к файловой системе HDFS. Поэтому, если вам нужно выполнить доступ / передачу данных между разными файловыми системами, используйте fs.


5

Насколько я могу судить, разницы между hdfs dfsи нет hadoop fs. Это просто разные соглашения об именах в зависимости от того, какую версию Hadoop вы используете. Например, в примечаниях 1.2.1 используется, hdfs dfsа в 0.19 используется hadoop fs. Обратите внимание, что отдельные команды описаны дословно. Они используются одинаково.

Также обратите внимание, что обе команды могут относиться к разным файловым системам в зависимости от того, что вы указали (hdfs, file, s3 и т. Д.). Если файловая система не указана, они возвращаются к значениям по умолчанию, указанным в вашей конфигурации.

Вы используете Hadoop 2.0.0, и похоже ( на основе документации 2.0.5 ) альфа-версии используют hadoop fsи настроены на использование HDFS в качестве схемы по умолчанию в вашей конфигурации. Команда hdfs dfsможет быть оставлена ​​ранее, и, поскольку она не указана в конфигурации, может просто использоваться по умолчанию для локальной файловой системы.

Поэтому я бы просто придерживался hadoop fsи не слишком беспокоился, поскольку в документации они идентичны.


3

FS относится к общей файловой системе, которая может указывать на любые файловые системы, такие как локальная, HDFS и т. Д. Но dfs очень специфичен для HDFS. Таким образом, когда мы используем FS, он может выполнять операции с локальной файловой системой из / в или с распределенной файловой системой hadoop по назначению. Но указав DFS относится к HDFS.

Ниже приведены выдержки из документации hadoop, в которой эти две оболочки описаны как разные оболочки.

FS Shell файловой системы (FS) вызывается bin / hadoop fs. Все команды оболочки FS принимают URI пути в качестве аргументов. Формат URI - схема: // авторитет / путь. Для HDFS схема - hdfs, а для локальной файловой системы - файловая. Схема и полномочия не являются обязательными. Если не указано, используется схема по умолчанию, указанная в конфигурации. Файл или каталог HDFS, например / parent / child, можно указать как hdfs: // namenodehost / parent / child или просто как / parent / child (при условии, что ваша конфигурация настроена так, чтобы указывать на hdfs: // namenodehost). Большинство команд в оболочке FS ведут себя как соответствующие команды Unix.

DFShell Оболочка HDFS вызывается bin / hadoop dfs. Все команды оболочки HDFS принимают URI пути в качестве аргументов. Формат URI - схема: // авторитет / путь. Для HDFS схема - hdfs, а для локальной файловой системы - файловая. Схема и полномочия не являются обязательными. Если не указано, используется схема по умолчанию, указанная в конфигурации. Файл или каталог HDFS, например / parent / child, можно указать как hdfs: // namenode: namenodeport / parent / child или просто как / parent / child (при условии, что ваша конфигурация настроена так, чтобы указывать на namenode: namenodeport). Большинство команд в оболочке HDFS ведут себя как соответствующие команды Unix.

Итак, из вышесказанного можно сделать вывод, что все зависит от конфигурации схемы. При использовании этих двух команд с абсолютным URI, то есть scheme: // a / b, поведение должно быть идентичным. Только это значение схемы по умолчанию для файла и hdfs для fs и dfs соответственно, что является причиной различий в поведении.


Почему hdfs dfs указывает на другое местоположение, чем hdfs dfs /?
mel

было бы неплохо, если бы была интерактивная оболочка вроде bash для hadoop
Крис

2

fs= файловая система
dfs= распределенная файловая система

fs = другие файловые системы + распределенные файловые системы

FS относится к общей файловой системе, которая может указывать на любые файловые системы, такие как локальная, HDFS и т. Д. Но dfs очень специфичен для HDFS. Таким образом, когда мы используем FS, он может выполнять операции с локальной файловой системой из / в или с распределенной файловой системой hadoop по назначению. Но указание работы DFS относится к HDFS.

Все зависит от конфигурации схемы. При использовании этих двух команд с абсолютным URI, т.е. scheme://a/bповедение должно быть идентичным. Только это значение схемы по умолчанию для file://и hdfs://для fsи, dfsсоответственно, является причиной различий в поведении.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.