FS relates to a generic file system which can point to any file systems like local, HDFS etc., but dfs is very specific to HDFS. So when we use FS it can perform operation with from/to local or hadoop distributed file system to destination, but specifying DFS operation relates to HDFS.
Below are the excerpts from Hadoop documentation which describe these two as different shells.
FS Shell:
The FileSystem (FS) shell is invoked by bin/hadoop fs
. All the FS shell commands take path URIs as arguments. The URI format is scheme://autority/path
. For HDFS the scheme is hdfs, and for the local filesystem the scheme is file. The scheme and authority are optional. If not specified, the default scheme specified in the configuration is used. An HDFS file or directory such as /parent/child
can be specified as hdfs://namenodehost/parent/child
or simply as /parent/child
(given that your configuration is set to point to hdfs://namenodehost
). Most of the commands in FS shell behave like corresponding Unix commands.
DFShell:
The HDFS shell is invoked by bin/hadoop dfs
. All the HDFS shell commands take path URIs as arguments. The URI format is scheme://autority/path
. For HDFS the scheme is hdfs, and for the local filesystem the scheme is file. The scheme and authority are optional. If not specified, the default scheme specified in the configuration is used. An HDFS file or directory such as /parent/child
can be specified as hdfs://namenode:namenodeport/parent/child
or simply as /parent/child
(given that your configuration is set to point to namenode:namenodeport
). Most of the commands in HDFS shell behave like corresponding Unix commands.
From the above it can be concluded that it all depends upon the scheme configure. When using this two command with absolute URI, i.e. scheme://a/b
the behavior shall be identical. Only its the default configured scheme value for file and hdfs for fs and dfs respectively which is the cause for the difference in behavior.
hdfs dfs
show the hdfs files too. – Ossicle