它们应该是平等的吗?
但是,为什么“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编辑
答案 0 :(得分:115)
以下是三个看起来相同但有微小差异的命令
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)
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 dfs
和hadoop fs
之间没有区别。根据您使用的Hadoop版本,它们只是不同的命名约定。例如,1.2.1中的注释使用hdfs dfs
而0.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://
的默认配置方案值分别为fs
和dfs
,这是造成行为差异的原因。
答案 6 :(得分:0)
hadoop fs 和 hdfs dfs 基本相同。两者都使用某些 linux 命令(如 ls、rm)给出相同的结果。你应该使用这样的命令
hadoop fs -ls hdfs dfs -ls