“hadoop fs”shell 命令和“hdfs dfs”shell 命令有啥区别?
Posted
技术标签:
【中文标题】“hadoop fs”shell 命令和“hdfs dfs”shell 命令有啥区别?【英文标题】:what's the difference between "hadoop fs" shell commands and "hdfs dfs" shell commands?“hadoop fs”shell 命令和“hdfs dfs”shell 命令有什么区别? 【发布时间】:2013-08-11 03:58:24 【问题描述】:他们应该是平等的吗?
但是,为什么“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 编译
【问题讨论】:
问这个问题是我的错。hdfs dfs
也显示 hdfs 文件。
Differnce between `hadoop dfs` and `hadoop fs`的可能重复
【参考方案1】:
“fs”一词是指通用文件系统,根据定义,它可以指向任何文件系统(包括 HDFS),但 dfs 非常具体。另一方面,“DFS”正是指 Hadoop 分布式文件系统访问。所以当我们使用FS时,它可以进行本地或hadoop分布式文件系统相关的操作,而dfs只能进行hadoop分布式文件系统相关的操作。
所以,
-
hadoop fs
当我们处理不同的文件系统时使用它,例如本地 FS、HDFS 等。
hdfs dfs
-
当我们处理与 HDFS 相关的操作时使用它。
另一个与这两个类似的命令是
-
hadoop dfs
不应使用此命令,因为它已被弃用。即使你使用它,它也会将命令发送到 hdfs dfs。
【讨论】:
【参考方案2】:FS 涉及到一个通用文件系统,它可以指向任何文件系统,如本地、HDFS 等,但 dfs 非常特定于 HDFS。因此,当我们使用 FS 时,它可以执行 from/to 本地或 hadoop 分布式文件系统到目标的操作,但指定 DFS 操作与 HDFS 相关。
以下是 Hadoop 文档的摘录,将这两个描述为不同的 shell。
FS 外壳:
文件系统 (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 分别是行为差异的原因。
【讨论】:
为什么 hdfs dfs 指向的位置与 hdfs dfs / 不同? 如果有一个交互式 shell 像 bash for hadoop 就好了【参考方案3】:fs
指任何文件系统,可以是本地或HDFS,但dfs
仅指HDFS 文件系统。因此,如果您需要在不同的文件系统之间执行访问/传输数据,fs
是您的最佳选择。
【讨论】:
【参考方案4】:hadoop fs 和 hdfs dfs 基本相同。对于 ls、rm 等一些 linux 命令,两者都给出了相同的结果。你应该使用这样的命令
hadoop fs -ls <path>
hdfs dfs -ls <path>
【讨论】:
有是的区别,但是,这个答案并没有解释它【参考方案5】:fs
= 文件系统dfs
= 分布式文件系统
fs
=其他文件系统+分布式文件系统
FS 与通用文件系统相关,它可以指向任何文件系统,如本地、HDFS 等。但 dfs 非常特定于 HDFS。因此,当我们使用 FS 时,它可以执行 from/to local 或 hadoop 分布式文件系统到 destination 的操作。但是指定DFS操作与HDFS有关。
这一切都取决于方案配置。当使用带有绝对 URI 的这两个命令时,即scheme://a/b
,行为应该是相同的。只有 file://
和 hdfs://
的默认配置方案值分别用于 fs
和 dfs
,这是导致行为差异的原因。
【讨论】:
【参考方案6】:以下是三个看似相同但有细微差别的命令
-
hadoop fs args
hadoop dfs args
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
【讨论】:
有趣:-)。因此,如果hadoop fs
与任何文件系统(例如本地或 hdfs)相关,那么当我执行 hadoop fs -ls /
时,hadoop 如何选择显示 HDFS 根目录内容?另外,当我运行hadoop fs -ls /
命令时,如何告诉hadoop 显示我的本地根目录内容?
您可以在作为参数传递给hadoop fs
命令(例如hdoop fs -ls file:///
)的URI 中使用file
架构来引用本地FS。如果什么都没说,则默认为 hdfs
架构,AFAIK (hdoop fs -ls /
== hadoop fs -ls hdfs:///
)。
为什么我需要hadoop fs -ls file:///
,而还有更传统的方式来列出本地文件?
为什么不推荐使用 'hadoop' 以支持 'hdfs'?有什么功能上的区别还是只是语法上的变化?
@dpsdce @OneCricketeer 哪个版本的 Hadoop,hadoop dfs
被弃用了?【参考方案7】:
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://authority/path。对于 HDFS,方案是 hdfs,并且 对于本地 FS,方案是文件。方案和权限是可选的。如果未指定,则配置中指定的默认方案为 用过的。 HDFS 文件或目录,例如 /parent/child 可以指定为 hdfs://namenodehost/parent/child 或简单地指定为 /parent/child(假设您的 配置设置为指向 hdfs://namenodehost)。
FS shell 中的大多数命令的行为类似于相应的 Unix 命令。每个命令都描述了差异。错误信息是 发送到stderr,输出发送到stdout。
如果正在使用 HDFS,
hdfs dfs
是同义词。
【讨论】:
【参考方案8】:据我所知,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
而不必太担心,因为在文档中它们是相同的。
【讨论】:
以上是关于“hadoop fs”shell 命令和“hdfs dfs”shell 命令有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
何时使用hadoop fs,hadoop dfs与hdfs dfs命令
何时使用hadoop fs,hadoop dfs与hdfs dfs命令
如何使用 Hadoop FS shell 将 hadoop 中的两个文件连接成一个文件?