1. HDFS有三部分组成分别是NameNode, DataNode,SecondNameNode。
1.1 其设计理念:存储大数据(GB,TB,PB级别的)
1) 优点:
高容错性:数据有多个副本;副本丢失,自动恢复。
适合批量处理:移动计算而非数据。
适合大数据处理
流式文件访问:一次写入,多次读取;保证数据的一致性。
可在廉价的机器上部署。
2) 缺点:
低延迟:即是离线计算
小文件存取:占用太多的NameNode的内存;磁盘碎片多
不支持并发修改文件。
1.2 HDFS架构图:
客户端访问HDFS;首先与NameNode交互,获取文件元数据信息;通过元数据找到对应的DataNode,然后客户端直接访问DataNode读取和写入数据。
1.3 HDFS基本概念
1. 数据块(Block):大文件会被分割成多个block进行存储,Block大小默认为64MB。每一个block会在多个Datanode上存储多份副本,默认是3份。
2. Namenode:Namenode负责管理文件元数据(文件目录、文件和block的对应关系以及block和Datanode的对应关系)当然还有副本的个数。
3. Datanode就负责存储Block,当然大部分容错机制都是在Datanode上实现的。同时,每个DataNode会向NameNode发送心跳保持与其联系(3秒一次),如果 NameNode10分钟没有收到DataNode的心跳,会认为该DataNode已经丢失,并从其它节点拷贝dataNode的Block到其它的存活的DataNode上。
4. Block的副本存放策略
1. 第一个副本,会根据资源使用不忙(磁盘不太满,cpu使用率不高),随机找到一个节点存放。
2. 第二个副本,放在与第一个副本不同机架的节点上。
3. 第三个副本,放在与第二个副本相同的机架的节点上。
4. 如果有更多副本,随机放置。
5. SecondaryNameNode:
1.作用:帮助NameNode合并edits和fsimage(即日志文件),减少NameNode的启动时间。
2.合并时机:
1.根据配置文件设置的时间间隔fs.checkpoint.period默认3600秒
2.根据这是edits log大小fs.checkpoint.size规定edits文件的最大容量。默认64MB
3.SecondaryNameNode合并edits和fsimage流程
1) 当时间间隔大于你所配置的值时,或者edits大于你所配置的大小时,SecondaryNameNode 开始合并。
2) 合并时,NodeName首先生成一个新的edits继续记录日志。
3) SecondaryNameNode通过网络拷贝后,合并成fsimage.ckpt,并传输到NameNode.
4) NameNode将fsimage.ckpt替换fsimage