假设我有一个分布式计算机网络,我说有1000个存储节点。 现在,如果添加了一个新节点,应该怎么做? 这意味着数据现在应该平均分为1001个节点?
如果节点范围是10而不是1000,答案也会改变。
答案 0 :(得分:3)
客户端机器首先将文件拆分为块说块A,块B然后客户机与NameNode交互以询问放置这些块的位置(块A块B).NameNode给clinet写一个数据节点列表数据。 NameNode通常从网络中选择最近的datanode。
然后客户端从这些列表中选择第一个datanode,并将第一个块写入datanode,datanode将块复制到另一个datanode。 NameNode保留有关文件及其相关块的信息。
如果在hadoop集群中添加了数据节点,HDFS将不会将块从旧的datanode移动到新的datanode以平衡集群。为此,您需要运行平衡器。
balancer程序是一个Hadoop守护程序,通过移动它来重新分配块 从过度使用的数据节点到未充分利用的数据节点,同时遵守块副本放置策略,通过将块副本放置在不同的机架上而不太可能导致数据丢失。它移动块直到集群被认为是平衡的,这意味着每个数据节点的利用率(节点上已用空间与节点总容量的比率)不同于集群的利用率(集群上已用空间的比率)到集群的总容量)不超过给定的阈值百分比。
参考:Hadoop权威指南第3版第350页
作为hadoop管理员,您应该在一天内安排平衡工作,以平衡hadoop群集上的块。
与平衡器相关的有用链接:
http://www.swiss-scalability.com/2013/08/hadoop-hdfs-balancer-explained.html