“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
以下是看起来相同但有细微差别的三个命令
- hadoop fs {args}
- hadoop dfs {args}
-
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 dfs
和hadoop 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
是同义词。