赞
踩
HDFS 可以跨机架、跨机器,可靠地存储海量文件。
HDFS 把每个文件存储为一系列的数据块,除了最后一个数据块以外,一个文件的所有数据块都是相同大小的。
HDFS 为了容错,一个文件的数据块会被复制。对于每个文件来说,文件块大小和复制因子都是可配置的。应用程序可以声明一个文件的副本数。复制因子可以在文件创建时声明,并且可以在以后修改。
通用场景下,当复制因子是 3 时,HDFS 的放置策略:
上述策略的优点:
上述策略的缺点:
该策略没有均匀地分布副本,三分之二的副本在一个机架上,另三分之一的副本分布在其他机架上.
NameNode 控制所有的数据块的复制决策,如下图所示:
它周期性地从集群的 DataNode 中收集心跳和数据块报告:
收集到心跳意味着 DataNode 正在正常提供服务
收集到的数据块报告会包含相应 DataNode 上的所有数据块列表
DataNode主动发送心跳:
当一切运行正常时,DataNode 会周期性发送心跳信息给 NameNode(默认是每 3 秒钟一次).
NameNode主动监测心跳:
如果 NameNode 在约定的时间内没有收到心跳信息(默认是 10 分钟);
会认为 DataNode 出现了问题,就会把该 DataNode 从集群中移除,并且启动一个进程去恢复数据.
DataNode节点挂掉的影响:
DataNode 脱离集群的原因有多种:如硬件故障、主板故障、电源老化和网络故障等.
机架感知的概念:
告诉Hadoop,集群中哪台机器属于哪个机架
机架感知的目的:
<property>
<name>topology.script.file.name</name>
<value>/path/to/script脚本</value>
</property>
这个配置选项的value指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值。
接受参数—datanode机器的ip地址.
输出的值—该ip地址对应的datanode所在的rackID,例如"/rack1".
NameNode启动时,会判断该配置选项是否为空–如果非空,则表示已经启用机架感知的配置:
此时namenode会根据配置寻找该脚本,并在接收到每一个datanode的心跳时,
将该datanode的ip地址作为参数传给该脚本运行,并将得到的输出作为该datanode所属的机架,保存到内存的一个map中.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。