将文件存储在 Hadoop 上,当并非所有副本都可以存储在群集上时



有人可以告诉我,如果我的Hadoop集群(复制因子= 3)只剩下15GB的空间,而我尝试保存一个6GB大小的文件会发生什么?

hdfs dfs -put 6gbfile.txt /some/path/on/hadoop

put操作会失败并给出错误(可能是集群已满),还是会保存 6GB 文件的两个副本并将无法保存在集群上的块标记为复制不足,从而占用整个 15GB 剩余部分?

您应该能够存储该文件。

它将尝试容纳尽可能多的副本。当它无法存储所有副本时,它将引发警告,但不会失败。结果,您将遇到复制不足的块。

您将看到的警告是

WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Not able to place enough replicas 

当你触发 put 命令时:

DFS实用程序在这里的行为就像客户端一样。

客户端将首先联系 Namenode,然后 Namenode 将指导客户端,在哪里写入块并保留该文件的维护元数据,然后其客户端负责根据指定的配置破坏块中的数据。

然后客户端将与不同的数据节点建立直接连接,它必须根据名称节点回复写入不同的块。

数据的第一个副本将由客户端仅在数据节点上写入,后续数据节点将在namenode的指导下相互创建副本。

因此,如果存在6 GB的空间,您应该能够放置15 GB的文件,因为最初原始副本是在Hadoop上创建的,后来一旦复制过程开始,就会出现问题。

最新更新