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

Storing a file on Hadoop when not all of its replicas can be stored on the cluster

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

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

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

当你触发 put 命令时:

dfs 实用程序在这里表现得像一个客户端。

客户端将首先联系 namenode,然后 namenode 将指导客户端将块写入何处并保留该文件的维护元数据,然后其客户端负责根据指定的配置将数据分解为块。

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

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

因此,如果有 15 GB space,您应该可以放置 6 GB 的文件,因为最初是在 hadoop 上创建原始副本,稍后一旦复制过程开始,问题就会出现出现。

您应该可以存储文件。

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

您会看到的警告是

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