【若泽大数据实战第十一天】HDFS详解二之副本放置策略

副本放置策略

假设在数据中心的一个机架上面有5个服务器。一般正常的机架放10个,为什么10个,这个是按照机架的电量去算的,每个服务器分配多少安培的电流,一个机柜的电流安培数是有标准的,一个机柜的电流大小除以一个服务器的电流大小,算一个估算值。】

正常情况下,就是三个副本。副本不是越多越好,越多,需要的存储空间就大了,而且写的越慢。

第一个副本:

放置在上传的DN节点上,比如现在用client客户端上传的文件提交到HDFS上面,上传的那台机器正好是DataNode节点,会优先在自己所在的节点上上传一个副本,这样就不需要通过网络IO通过网线去传输数据包,这样会节省时间。

如果是集群外提交,则随机挑选一台磁盘不太慢、CPU不太忙的节点上。(老大NN是知道哪些节点是空闲的,会返回地址列表让你去上传)。

第二个副本:

放置在与第一个副本不同的机架的节点上。

第三个副本:

放置在与第二个副本相同机架的不同节点上。

假如还有更多的副本,就随机放,随机放在节点上。

生产上 尽量将上传数的动作,读写的动作 选取DataNode节点上。优先自己,这样减少网络带宽消耗,减少时间。

面试题:
集群上有DataNode 3个,其中一个DataNode挂了,那么一个文件有三个副本,
那么我现在能够正确读取文件内容吗?

待补充........

(网上:第一不会给储存带来影响,因为有其他的副本保存着,不过建议尽快修复,第二会影响运算的效率,机器少了,reduce在保存数据时选择就少了,一个数据的块就大了所以就会慢。)


其中DataNode挂了其实就是block Miss,那么怎样去修复?

1.手动修复
参考:https://blog.csdn.net/high2011/article/details/72461376

hdfs |grep debug

hdfs debug
Usage: hdfs debug <command> [arguments]

verify [-meta <metadata-file>] [-block <block-file>]
recoverLease [-path <path>] [-retries <num-retries>]

2.自动修复
参考:https://www.cnblogs.com/prayer21/p/4819789.html

猜你喜欢

转载自blog.csdn.net/liweihope/article/details/88058337