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

他们应该是平等的吗?

but, why the "hadoop fs" commands show the hdfs files while the "hdfs dfs" commands show the local files?

下面是 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 由詹金斯编译于2013年4月22日星期一10:48:26

74711 次浏览

fs refers to 任何文件系统, it could be local or HDFS but dfs refers to only HDFS file system. So if you need to perform access/transfer data between different filesystems, fs is the way to go.

据我所知,hdfs dfshadoop fs之间没有区别。它们只是基于所使用的 Hadoop 版本的不同命名约定。例如,1.2.1中的注释使用 hdfs dfs,而 0.19使用 hadoop fs。注意,这些单独的命令是逐字描述的。它们的用法完全相同。

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

您正在使用 Hadoop 2.0.0,而且 Alpha 版本看起来(基于2.0.5文档)使用 hadoop fs,并且被设置为使用 HDFS 作为配置中的默认方案。hdfs dfs命令可能从以前开始保留,因为在配置中没有指定,所以可能只是默认为本地文件系统。

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

下面是三个看起来相同但有细微差别的命令

  1. hadoop fs {args}
  2. Hadoop dfs { args }
  3. Hdfs dfs { args }

  hadoop fs <args>

FS 涉及到一个通用的文件系统,它可以指向任何文件系统,如本地文件系统、 HDFS 等。因此,当您处理不同的文件系统(如 LocalFS、(S) FTP、 S3和其他文件系统)时,可以使用这种方法


  hadoop dfs <args>

Dfs 非常特定于 HDFS。将工作涉及到 HDFS 的操作。这已被废弃,我们应该使用 Hdfs dfs代替。


  hdfs dfs <args>

same as 2nd i.e would work for all the operations related to HDFS and is the recommended command instead of Hadoop Dfs

下面是分类为 hdfs命令的列表。

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

因此,即使使用 Hadoop Dfs,它也会查找 hdfs 并将该命令委托给 Hdfs dfs

FS 涉及到一个通用的文件系统,它可以指向任何文件系统,比如本地文件系统、 HDFS 等等,但是 dfs 非常特定于 HDFS。因此,当我们使用 FS 时,它可以执行从/to local 或 hadoop 分散式档案系统到目的地的操作,但指定 DFS 操作与 HDFS 有关。

Below are the excerpts from Hadoop documentation which describe these two as different shells.

财政司司长壳牌:

The FileSystem (FS) shell is invoked by bin/hadoop fs. All the FS shell commands take path URIs as arguments. The URI format is scheme://autority/path. For HDFS the scheme is hdfs, and for the local filesystem the scheme is file. The scheme and authority are optional. If not specified, the default scheme specified in the configuration is used. An HDFS file or directory such as /parent/child can be specified as hdfs://namenodehost/parent/child or simply as /parent/child (given that your configuration is set to point to hdfs://namenodehost). Most of the commands in FS shell behave like corresponding Unix commands.

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 分别是导致行为差异的原因。

enter image description here

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

文件系统(FS) shell 包括各种类似 shell 的命令,这些命令直接与 Hadoop 分散式档案系统(HDFS)以及其他命令交互 Hadoop 支持的文件系统,如 Local FS、 WebHDFS、 S3 FS 等。

Bin/hadoop fs

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

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

如果正在使用 HDFS,

Hdfs dfs

is a synonym.

fs = 文件系统
dfs = 分散式档案系统

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

FS 涉及到一个通用的文件系统,它可以指向任何文件系统,如本地文件系统、 HDFS 等。但是 dfs 非常特定于 HDFS。因此,当我们使用 FS 时,它可以执行从/to local 或 hadoop 分散式档案系统到目的地的操作。但是指定 DFS 操作与 HDFS 有关。

这完全取决于方案配置。当使用这两个具有绝对 URI 的命令时,即 scheme://a/b,其行为应该是相同的。只有它分别为 fsdfsfile://hdfs://的默认配置方案值是导致行为差异的原因。

Hadoop fs 和 hdfs dfs 基本相同。对于 ls、 rm 之类的 Linux 命令,两者都给出了相同的结果。你应该像这样使用命令

hadoop fs -ls <path>
hdfs dfs -ls <path>

The “fs” term refers to a generic file system, which by the definition can point to ANY file system ( including HDFS), but dfs is very specific. On the other hand, “DFS” refers precisely to Hadoop Distributed File System access. So when we use FS it can perform operation related to local or hadoop distributed file system and dfs can perform operation related to hadoop distributed file system only.

那么,

  1. Hadoop fs

它用于处理不同的文件系统,如本地文件系统、 HDFS 等。

Hdfs dfs

  1. 它用于处理与 HDFS 相关的操作。

另一个与这两个命令相似的命令是

  1. hadoop dfs

不应使用此命令,因为不推荐使用此命令。即使您使用它,它也会将命令发送到 hdfs dfs。