“ hadoop fs” shell命令和“ hdfs dfs” shell命令之间有什么区别?


109

他们应该平等吗?

但是,为什么“ hadoop fs”命令显示hdfs files而“ hdfs dfs”命令显示本地文件呢?

这是hadoop版本信息:

Hadoop 2.0.0-mr1-cdh4.2.1子版本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于2013年4月22日星期一10:48:26编译


1
问这个问题是我的错。也hdfs dfs显示hdfs文件。
查理·林

Answers:


140

以下是看起来相同但有微小差异的三个命令

  1. hadoop fs {args}
  2. hadoop dfs {args}
  3. hdfs dfs {args}

  hadoop fs <args>

FS与通用文件系统有关,该文件系统可以指向任何文件系统,例如本地,HDFS等。因此,当您处理不同的文件系统(例如本地FS,(S)FTP,S3等)时,可以使用FS。


  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 fs -ls /命令时如何告诉hadoop显示本地根目录内容?
sgsi 2015年

8
您可以通过使用file作为参数传递给hadoop fs命令(例如hdoop fs -ls file:///)的URI上的模式来引用本地FS 。如果什么也没说,则默认为hdfs架构AFAIK(hdoop fs -ls /== hadoop fs -ls hdfs:///)。
2015年

2
还有为什么我有需要hadoop fs -ls file:///,而还有更多传统的方式来列出本地文件?
srctaha '16

为什么不赞成使用“ hadoop”,而建议使用“ hdfs”?在功能上有什么不同还是仅仅是语法上的改变?
Shuklaswag's

31

在此处输入图片说明

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

文件系统(FS)外壳程序包括各种类似于外壳程序的命令,这些命令与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统(例如本地FS,WebHDFS,S3 FS等)直接交互。

bin / hadoop fs <args>

所有FS Shell命令都将路径URI作为参数。URI格式为scheme:// authority / path。对于HDFS,方案为hdfs,对于本地FS,方案为file。方案和权限是可选的。如果未指定,则使用配置中指定的默认方案。可以将HDFS文件或目录(例如/ parent / child)指定为hdfs:// namenodehost / parent / child,也可以简单地指定为/ parent / child(假设您的配置设置为指向hdfs:// namenodehost)。

FS Shell中的大多数命令的行为类似于相应的Unix命令。每个命令都描述了差异。错误信息将发送到stderr,输出将发送到stdout。

如果正在使用HDFS,

hdfs dfs

是同义词。


5

fs指任何文件系统,它可以是本地文件或HDFS,但dfs仅指HDFS文件系统。因此,如果您需要在不同文件系统之间执行访问/传输数据,那么fs是可行的方法。


5

据我所知,hdfs dfs和之间没有区别hadoop fs。它们只是基于您使用的Hadoop版本的不同命名约定。例如,在附注1.2.1使用hdfs dfs0.19用途hadoop fs。请注意,逐个描述了单独的命令。它们的用法相同。

还要注意,这两个命令可以根据您指定的内容(hdfs,file,s3等)引用不同的文件系统。如果未列出任何文件系统,它们将恢复为配置中指定的默认值。

您正在使用Hadoop 2.0.0,它看起来像(基于2.0.5文档基于 Alpha的版本hadoop fs,并被设置为将HDFS用作配置中的默认方案。该hdfs dfs命令可能之前没有保留,并且由于未在配置中指定,因此可能仅默认为本地文件系统。

因此,我会坚持使用hadoop fs,不要太担心,因为在文档中,它们是相同的。


3

FS与通用文件系统有关,该文件系统可以指向任何文件系统,例如本地,HDFS等。但是dfs非常特定于HDFS。因此,当我们使用FS时,它可以执行从/到本地或hadoop分布式文件系统到destination的操作。但是指定DFS操作与HDFS有关。

以下是hadoop文档的摘录,该文档将这两个描述为不同的shell。

FS Shell FileSystem(FS)Shell由bin / hadoop fs调用。所有FS Shell命令都将路径URI作为参数。URI格式为scheme:// autority / path。对于HDFS,方案为hdfs,对于本地文件系统,方案为file。方案和权限是可选的。如果未指定,则使用配置中指定的默认方案。可以将HDFS文件或目录(例如/ parent / child)指定为hdfs:// namenodehost / parent / child,也可以简单地指定为/ parent / child(假设您的配置设置为指向hdfs:// namenodehost)。FS Shell中的大多数命令的行为类似于相应的Unix命令。

DFShell HDFS Shell由bin / hadoop dfs调用。所有HDFS Shell命令都将路径URI作为参数。URI格式为scheme:// autority / path。对于HDFS,方案为hdfs,对于本地文件系统,方案为file。方案和权限是可选的。如果未指定,则使用配置中指定的默认方案。可以将HDFS文件或目录(例如/ parent / child)指定为hdfs:// namenode:namenodeport / parent / child,也可以简单地指定为/ parent / child(假设您的配置设置为指向namenode:namenodeport)。HDFS Shell中的大多数命令的行为类似于相应的Unix命令。

因此,从以上可以得出结论,这完全取决于方案配置。当将这两个命令与绝对URI一起使用时,即scheme:// a / b,其行为应相同。分别是文件的默认配置方案值和fs和dfs的hdfs方案默认值,这是行为差异的原因。


为什么hdfs dfs指向的位置不同于hdfs dfs /?
梅尔2015年

这将是很好,如果有喜欢的bash Hadoop的一个交互的shell
克里斯-

2

fs=文件系统
dfs=分布式文件系统

fs =其他文件系统+分布式文件系统

FS与通用文件系统有关,该文件系统可以指向任何文件系统,例如本地,HDFS等。但是dfs非常特定于HDFS。因此,当我们使用FS时,它可以执行从/到本地或hadoop分布式文件系统到destination的操作。但是指定DFS操作与HDFS有关。

这完全取决于方案配置。当将这两个命令与绝对URI一起使用时,即scheme://a/b行为应相同。仅其默认配置方案值file://hdfs://用于fsdfs分别是用于在行为差异的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.