需要解释一下 Hadoop 文件系统

Need explanation on Hadoop file system

对于以下命令,

hadoop fs -put foo.txt bar.txt

操作成功后,bar.txt定位到我本地硬盘的哪个位置,给定

  1. 单节点设置?
  2. 伪分布式设置?

bar.txt 是否仍会复制 3 次以进行备份?

bar.txt会放在当前hadoop用户主目录下
/user/<hadoop-user> 根据以下代码

@Override
public Path getHomeDirectory() {
  return makeQualified(new Path("/user/" + dfs.ugi.getShortUserName()));
}  

来源here

  1. 如果集群是单节点,即使将dfs.replication设置为3,它也只会复制一次,因为Hadoop不会在同一个节点上多次保存同一个块。
  2. 伪分布式模式将所有 hadoop 守护进程 运行 放在同一台机器上。它只不过是单节点集群。
    如果您将 dfs.replication 设置为 3,Hadoop 只会给您警告。

希望对您有所帮助!

上面的 fs 命令试图将文件 foo.txt 作为 bar.txt 放在当前的 hdfs 中。 hdfs 的路径由操作正在执行的当前用户确定。这是因为您没有提供到目的地的绝对路径。

如果您在 hdfs 中配置了 /user 作为主目录,它将采用 /user/ 的路径并将文件放在那里。

此外,如果 hdfs 中没有与当前用户对应的文件夹,它将失败并指出文件不存在。

例如当前用户 运行 是 "testusr1"。上面的命令将文件放在“/users/testusr1”下。

您可以通过执行命令#hadoop fs -ls /user/

来验证这一点

据我所知,这对于伪或单节点设置应该是相同的。

[root@sandbox ~]# hadoop fs -ls /user
Found 11 items
drwx------   - root      hdfs           0 2015-04-13 03:59 /user/root
.
.
.
.
.
drwxr-xr-x   - root      hdfs           0 2015-04-13 04:18 /user/testusr1
[root@sandbox ~]#
[root@sandbox ~]# su - testusr1
[testusr1@sandbox ~]$ whoami
testusr1
[testusr1@sandbox ~]$ pwd
/home/testusr1
[testusr1@sandbox ~]$ ll
total 7
-rw-rw-r-- 1 testusr1 testusr1 49 2015-04-13 04:17 foo-testusr2.txt
[testusr1@sandbox ~]$ hadoop fs -put foo-testusr2.txt bar-testusr2.txt

对于复制因子,您可以在基本 hadoop fs -ls 命令的帮助下进行检查。

[testusr1@sandbox ~]$exit
logout
[root@sandbox ~]# hdfs dfs -ls /user/testusr1
Found 1 items
-rw-r--r--   1 testusr1 hdfs         49 2015-04-13 04:18 /user/testusr1/bar-testusr2.txt
[root@sandbox ~]#

在上面的示例输出中,您可以在文件权限后看到数字 1。它反映为 1,并且符合我的 hdfs 配置。