119

他们应该平等吗?

但是,为什么“ 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 PDT 编译

4

8 回答 8

152

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

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

  hadoop fs <args>

FS 涉及到一个通用文件系统,它可以指向任何文件系统,如本地、HDFS 等。因此,当您处理不同的文件系统时,如本地 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

于 2014-06-25T08:49:50.577 回答
47

在此处输入图像描述

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

文件系统 (FS) shell 包括各种类似 shell 的命令,它们直接与 Hadoop 分布式文件系统 (HDFS) 以及 Hadoop 支持的其他文件系统(例如本地 FS、WebHDFS、S3 FS 等)交互。

bin/hadoop fs<args>

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

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

如果正在使用 HDFS,

hdfs dfs

是同义词。

于 2017-08-28T01:26:53.990 回答
7

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

于 2013-08-09T08:45:40.210 回答
5

据我所知,hdfs dfs和之间没有区别hadoop fs。根据您使用的 Hadoop 版本,它们只是不同的命名约定。例如,1.2.1中的注释使用hdfs dfs,而0.19使用hadoop fs. 请注意,单独的命令是逐字描述的。它们的使用方式相同。

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

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

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

于 2013-08-09T16:16:50.147 回答
5

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

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

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

这一切都取决于方案配置。当这两个命令与绝对 URI 一起使用时,即scheme://a/b行为应该是相同的。只有其默认配置的方案值 forfile://hdfs://forfsdfs分别是行为差异的原因。

于 2017-09-03T02:42:02.040 回答
3

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

以下是 Hadoop 文档的摘录,将这两个描述为不同的外壳。

FS 外壳:

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

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

于 2015-10-17T13:34:52.183 回答
0

“fs”一词是指通用文件系统,根据定义,它可以指向任何文件系统(包括 HDFS),但 dfs 非常具体。另一方面,“DFS”正是指 Hadoop 分布式文件系统访问。所以当我们使用 FS 时,它可以执行与本地或 hadoop 分布式文件系统相关的操作,而 dfs 只能执行与 hadoop 分布式文件系统相关的操作。

所以,

  1. hadoop fs

当我们处理不同的文件系统时使用它,例如本地 FS、HDFS 等。

hdfs dfs

  1. 当我们处理与 HDFS 相关的操作时使用它。

另一个看起来与这两个类似的命令是

  1. hadoop dfs

不应使用此命令,因为它已被弃用。即使你使用它,它也会将命令发送到 hdfs dfs。

于 2021-10-21T19:06:19.577 回答
-1

hadoop fs 和 hdfs dfs 基本相同。对于 ls、rm 等一些 linux 命令,两者都给出了相同的结果。你应该使用这样的命令

hadoop fs -ls <path>
hdfs dfs -ls <path>
于 2021-07-15T05:11:56.797 回答