需要解释一下 Hadoop 文件系统
Need explanation on Hadoop file system
对于以下命令,
hadoop fs -put foo.txt bar.txt
操作成功后,bar.txt定位到我本地硬盘的哪个位置,给定
- 单节点设置?
- 伪分布式设置?
bar.txt 是否仍会复制 3 次以进行备份?
bar.txt
会放在当前hadoop用户主目录下
/user/<hadoop-user>
根据以下代码
@Override
public Path getHomeDirectory() {
return makeQualified(new Path("/user/" + dfs.ugi.getShortUserName()));
}
来源here
- 如果集群是单节点,即使将
dfs.replication
设置为3,它也只会复制一次,因为Hadoop不会在同一个节点上多次保存同一个块。
- 伪分布式模式将所有 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 配置。
对于以下命令,
hadoop fs -put foo.txt bar.txt
操作成功后,bar.txt定位到我本地硬盘的哪个位置,给定
- 单节点设置?
- 伪分布式设置?
bar.txt 是否仍会复制 3 次以进行备份?
bar.txt
会放在当前hadoop用户主目录下
/user/<hadoop-user>
根据以下代码
@Override
public Path getHomeDirectory() {
return makeQualified(new Path("/user/" + dfs.ugi.getShortUserName()));
}
来源here
- 如果集群是单节点,即使将
dfs.replication
设置为3,它也只会复制一次,因为Hadoop不会在同一个节点上多次保存同一个块。 - 伪分布式模式将所有 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 配置。