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