hdfs—在hadoop上存储一个文件,而不是它的所有副本都可以存储在集群上

wribegjk  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(374)

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

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

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

fkvaft9z

fkvaft9z1#

您应该能够存储该文件。
它将尝试容纳尽可能多的副本。当它无法存储所有副本时,它将抛出一个警告,但不会失败。因此,您将使用复制不足的块着陆。
你会看到的警告是

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

vdgimpew2#

当你发出put命令时:
dfs实用程序在这里的行为类似于客户端。
客户机将首先联系namenode,然后namenode将指导客户机,在何处写入块并保留该文件的维护元数据,然后其客户机负责根据指定的配置在块中断开数据。
然后,客户机将与不同的数据节点建立直接连接,它必须根据namenode应答写入不同的块。
数据的第一个副本将由客户端仅在数据节点上写入,随后的副本数据节点将在namenode的指导下在彼此上创建。
因此,如果有15gb的空间,您应该能够放置6gb的文件,因为最初在hadoop上创建原始副本,稍后一旦复制过程开始,问题就会出现。

相关问题