【问题标题】:Storing a file on Hadoop when not all of its replicas can be stored on the cluster当并非所有副本都可以存储在集群上时,将文件存储在 Hadoop 上
【发布时间】:2015-07-07 10:06:03
【问题描述】:
如果我的 Hadoop 集群(复制因子 = 3)只剩下 15GB 的空间并且我尝试保存一个大小为 6GB 的文件,有人可以告诉我会发生什么吗?
hdfs dfs -put 6gbfile.txt /some/path/on/hadoop
put 操作会失败并给出错误(可能是集群已满)还是会保存 6GB 文件的两个副本并将无法保存在集群上的块标记为复制不足,从而占用整个 15GB剩下的?
【问题讨论】:
标签:
hadoop
hdfs
replication
【解决方案1】:
当你触发 put 命令时:
dfs 实用程序在这里表现得像一个客户端。
客户端将首先联系namenode,然后namenode将指导客户端,将块写入何处,并将维护该文件的元数据,然后客户端负责根据指定的配置将数据分解为块。
然后客户端将与不同的数据节点建立直接连接,它必须根据名称节点的回复写入不同的块。
第一个数据副本将由客户端仅在数据节点上写入,后续副本数据节点将在namenode的指导下相互创建。
所以如果有 15 GB 的空间,你应该可以放置 6 GB 的文件,因为最初原始副本是在 hadoop 上创建的,稍后一旦开始复制过程就会出现问题。
【解决方案2】:
您应该能够存储该文件。
它将尝试容纳尽可能多的副本。当它无法存储所有副本时,它会抛出警告但不会失败。结果,您将获得复制不足的块。
您会看到的警告是
WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Not able to place enough replicas