![](https://csdnimg.cn/release/download_crawler_static/86158005/bg5.jpg)
3. DataNode开始直接相互复制。
最后在说一下 HDFS的几个设计特点:(对于框架设计值得借鉴)
1. Block 的放置
默认不配置,一个 Block 会有三份备份。一份放在 NameNode指定的 DataNode,
另一份放在与指定 DataNode非同一 Rack 上的 DataNode,最后一份放在与指定
DataNode同一 Rack上的 DataNode上。备份无非就是为了数据安全,考虑同一
Rack的失败情况以及不同 Rack之间数据拷贝性能问题就采用这种配置方式。
2. 心跳检测 DataNode的健康状况,如果发现问题就采取数据备份的方式来保
证数据的安全性。
3. 数据复制。( DataNode失败的时候,需要平衡 DataNode的存储利用率的时
候,需要平衡 DataNode数据交互压力的时候)
这里先说一下,使用 HDFS的 balancer 命令,可以配置一个 Threshold 来平
衡每一个 DataNode磁盘利用率。例如设置了 Threshold 为 10%,那么执行
balancer 命令的时候,首先统计所有 DataNode的磁盘利用率的均值,然后
判断如果某一个 DataNode的磁盘利用率超过这个均值 Threshold 以上,那么
将会把这个 DataNode的 block 转移到磁盘利用率低的 DataNode,这对于新
节点的加入来说十分有用。
4. 数据交验。采用 CRC32作数据交验。在文件 Block 写入的时候除了写入数据
还会写入交验信息,在读取的时候需要交验后再读入。
5. NameNode是单点。如果失败的话, 任务处理信息将会纪录在本地文件系统和
远端的文件系统中。
6. 数据管道性的写入。
当客户端要写入文件到 DataNode上,首先客户端读取一个 Block 然后写到第
一个 DataNode上,然后由第一个 DataNode传递到备份的 DataNode上,一直
到所有需要写入这个 Block 的 NataNode都成功写入,客户端才会继续开始写
下一个 Block 。
7. 安全模式。
在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系
统处于安全模式的情况下, 文件系统中的内容不允许修改也不允许删除, 直到安
全模式结束。安全模式主要是为了系统启动的时候检查各个 DataNode上数据块
的有效性, 同时根据策略必要的复制或者删除部分数据块。 运行期通过命令也可
以进入安全模式。 在实践过程中, 系统启动的时候去修改和删除文件也会有安全
模式不允许修改的出错提示,只需要等待一会儿即可。
综合 MapReduce和 HDFS来看 Hadoop的结构: