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

时间:2013-08-09 08:37:24

标签: hadoop hdfs

它们应该是平等的吗?

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

这里是hadoop版本信息:

  

Hadoop 2.0.0-mr1-cdh4.2.1 Subversion   混帐://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编辑

7 个答案:

答案 0 :(得分:115)

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

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

  4.   hadoop fs <args>
    

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


      hadoop dfs <args>
    

    dfs非常特定于HDFS。将与HDFS有关的操作。这已被弃用,我们应该使用 hdfs dfs


      hdfs dfs <args>
    

    与第二个相同,即适用于与HDFS相关的所有操作,是推荐的命令,而不是 hadoop dfs

    下面的

    是分类为hdfs命令的列表。

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

    所以即使你使用 hadoop dfs ,它也会看起来找到hdfs并将该命令委托给 hdfs dfs

答案 1 :(得分:23)

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 <args>

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

FS shell中的大多数命令都表现得像对应的Unix命令。使用每个命令描述差异。错误信息是 发送到stderr并将输出发送到stdout。

如果正在使用HDFS,

  

hdfs dfs

是同义词。

答案 2 :(得分:5)

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

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

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

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

答案 3 :(得分:4)

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

答案 4 :(得分:3)

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

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

FS Shell File / System(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 bin / hadoop dfs调用HDFS shell。所有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,这是造成行为差异的原因。

答案 5 :(得分:2)

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

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

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

这一切都取决于方案配置。当使用具有绝对URI的这两个命令时,即scheme://a/b,行为应该是相同的。仅file://的{​​{1}}和hdfs://的默认配置方案值分别为fsdfs,这是造成行为差异的原因。

答案 6 :(得分:0)

hadoop fs 和 hdfs dfs 基本相同。两者都使用某些 linux 命令(如 ls、rm)给出相同的结果。你应该使用这样的命令

hadoop fs -ls hdfs dfs -ls

相关问题