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

他们应该是平等的吗?

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

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

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

     hadoop fs <args> 

FS涉及到一个通用的文件系统,可以指向任何文件系统,如本地,HDFS等,所以这可以用于处理不同的文件系统,如本地FS,HFTP FS,S3 FS等

  hadoop dfs <args> 

dfs是HDFS特有的。 将与HDFS相关的操作工作。 这已被弃用,我们应该使用hdfs dfs

  hdfs dfs <args> 

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

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

  **#hdfs commands** namenode|secondarynamenode|datanode|dfs|dfsadmin|fsck|balancer|fetchdt|oiv|dfsgroups 

所以,即使你使用Hadoop的dfs ,它也会查找hdfs并将该命令委托给hdfs dfs

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

还要注意,这两个命令都可以引用不同的文件系统,具体取决于你指定的内容(hdfs,file,s3等)。 如果没有列出文件系统,它们将回退到您的configuration中指定的默认值。

您正在使用Hadoop 2.0.0,它看起来像( 基于2.0.5文档 )Alpha版本使用hadoop fs ,并被设置为使用HDFS作为configuration中的默认scheme。 hdfs dfs命令可能之前保留,因为没有在configuration中指定,可能只是默认为本地文件系统。

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

fs是指任何文件系统,它可以是本地或HDFS,但dfs仅指HDFS文件系统。 所以如果你需要在不同的文件系统之间进行访问/传输数据,那么fs就是要走的路。

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

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

FS Shell FileSystem(FS)shell由bin / hadoop fs调用。 所有FS shell命令都将pathURI作为参数。 URI格式是scheme:// autority / path。 对于HDFS,scheme是hdfs,而对于本地文件系统,scheme是文件。 该计划和权限是可选的。 如果未指定,则使用在configuration中指定的默认scheme。 一个HDFS文件或目录(如/ parent / child)可以被指定为hdfs:// namenodehost / parent / child,或者简单地指定为/ parent / child(假设你的configuration被设置为指向hdfs:// namenodehost)。 FS shell中的大部分命令都像对应的Unix命令一样。

DFShell HDFS shell由bin / hadoop dfs调用。 所有HDFS shell命令都将pathURI作为参数。 URI格式是scheme:// autority / path。 对于HDFS,scheme是hdfs,而对于本地文件系统,scheme是文件。 该计划和权限是可选的。 如果未指定,则使用在configuration中指定的默认scheme。 可以将hdfs:// namenode:namenodeport / parent / child或简单地指定为/ parent / child(假设您的configuration设置为指向namenode:namenodeport),将HDFS文件或目录(如/ parent / child)指定为。 HDFS shell中的大部分命令都像对应的Unix命令一样。

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

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

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

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

这一切都取决于schemeconfiguration。 当使用绝对URI这两个命令,即scheme:// a / b时,行为应该是相同的。 只有fs和dfs文件和hdfs的默认configurationscheme值是行为差异的原因。

在这里输入图像说明

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命令都将pathURI作为参数。 URI格式是scheme:// authority / path。 对于HDFS,scheme是hdfs,而对于Local FS,scheme是文件。 该计划和权限是可选的。 如果未指定,则使用在configuration中指定的默认scheme。 一个HDFS文件或目录(如/ parent / child)可以被指定为hdfs:// namenodehost / parent / child,或者简单地指定为/ parent / child(假设你的configuration被设置为指向hdfs:// namenodehost)。

FS shell中的大部分命令都像对应的Unix命令一样。 用每个命令描述差异。 错误信息发送到标准错误,输出发送到标准输出。

如果正在使用HDFS,

hdfs dfs

是同义词。