Hadoop框架---- HDFS学习


为什么要分布式存储

  解决单机存储容量有限的问题, 采用横向扩展的方式(加机器), 来通过分布式的方式实现跨机存储, 且可以提高传输效率


HDFS简介, 及其架构组成

  HDFS全称是Hadoop Distributed File System, Hadoop的分布式文件存储系统, 就是用来实现分布式(跨机)存储的.
  它(HDFS)由三种角色组成, 分别是: namenode, SecondaryNameNode, datanode, 作用如下:
    namenode:       它是HDFS集群的主节点
        1. 管理整个HDFS集群.
        2. 维护和管理元数据(描述数据的数据)
    SecondaryNameNode: 辅助节点
        辅助namenode维护和管理元数据的.
    datanode:       从节点
        1. 负责存储具体的数据.
        2. 负责数据的读写操作.


HDFS是如何存储文件的?

  为了统一管理, 会按照 128MB/块 将文件切割成N个块, 为了提高容错, 每个块的副本数默认是 3.
     即: 副本机制是 3, 每个块默认大小: 128MB,实际开发中,建议副本数为 2或5.
     副本数越高:
        好处是: 数据的容错率越高, 安全性越高.
        弊端是: 磁盘的利用率降低了.
    (每个)块的大小, 越大: (例如: 把块的大小从默认的 128MB => 256MB)
        好处是: 相同文件大小的情况下, 块的数量减少了, 元数据也会降低, 减少内存空间占用, 提高效率.
        弊端是: 如果操作的是大量的小文件, 块越大, 效率越低.


namenode如何管理元数据?

   1. namenode是通过Edits文件和FsImage文件来维护和管理HDFS的元数据的.
    2. 当用户操作HDFS文件的时候(写,改,删), 相应的元数据就会发生变化, 然后会实时写入到Edits文件中.Edits文件相较于FsImage文件, 比较小, 所以修改起来速度比较快, 记录的是 HDFS集群的最新的(最近一段时间的)元数据.
    3. 当Edits文件达到一定的阈值(1个小时 或者 100W次), 就会将其和FsImage文件合并, 形成新的FsImage文件.FsImage文件相对较大, 记录的是HDFS集群所有的元数据(不包括最新的元数据).
    4. 对Edits文件 和 FsImage文件合并的动作是由 SecondaryNameNode来完成的, 全程namenode不参与.
    5. 当我们启动Hadoop集群的时候, namenode会去加载FsImage文件 和 最新的那个Edits文件内容到内存, 并启动自检程序,此时HDFS集群会强制进入到安全模式, 自检没问题后, 会自动退出安全模式.

 


SecondaryNameNode如何辅助namenode管理元数据?

   1. SecondaryNameNode会间隔一定的时间(60秒)检测namenode的Edits文件的状态.
    2. 当其(Edits文件)达到一定的阈值(1个小时或者100W次), 就会通知namenode形成新的Edits文件, 并禁用之前旧的Edits文件.
    3. SecondaryNameNode会通过Http协议将namenode的 最近的 Edits文件 和 FsImage文件拉取到本地进行合并, 全程namenode不参与.
    4. SecondaryNameNode将合并后的新的FsImage文件推送给namenode.
    5. namenode不会立即删除旧的Edits文件和FsImage文件, 而是在重启服务器集群或者达到一定阈值的时候才会自动删除.


namenode如何管理datanode?

    副本机制, 心跳机制, 负载均衡.


HDFS的写数据流程和读数据流程

写数据流程:   

    1. Client(客户端)请求namenode, 进行文件上传.
    2. namenode校验该客户端对此文件是否有写权限, 且文件是否存在, 合法后, 会告知该客户端可以上传.
    3. Client对HDFS文件进行切块(默认: 128MB/块).
    4. Client重新请求namenode, 第1个Block的上传位置.
    5. namenode接收到请求后, 会根据副本机制, 负载均衡, 机架感知原理, 返回给该客户端1个datanode列表. 例如: node1, node2, node3
    6. Client于datanode列表的, 第1个datanode进行连接(最近的datanode节点)
    7. Client依次和其它的datanode进行连接, 形成传输管道(pipeline), 并建立反向应答机制(ACK机制)
    8. 采用数据报包(每个包不超过64KB)的形式发送数据, 根据传输管道依次发送, 并给出Ack回执信息.
    9. 重复此步骤, 直至第1个Block块的数据上传完毕.
    10. Client重新请求namenode, 第2个块的上传路径, 然后返回第4步, 重新往下执行, 直至所有的Block块传输完毕, 至此, HDFS写数据流程结束.


读数据流程:

    1. 客户端请求namenode, 读取文件数据.
    2. namenode接收到客户端请求后, 会校验该客户端对此文件是否有读权限, 且文件是否存在,校验合法后, namenode会返回给客户端 该文件的 全部或者部分的块的地址(datanode列表), 这些地址都是鲜活的.
    3. 客户端根据上述的datanode列表, 进行连接, 并行的从中读取数据.
    4. 当上述的Block读取完毕后, 客户端会重新请求namenode获取剩下的部分或者全部的块信息, 然后重复上述步骤, 直至所有的块数据读取完毕.
    5. 客户端按照Block块的编号, 把这些块数据拼接到一起, 就得到了最终的完整文件, 至此, HDFS读数据流程完毕.


HDFS的垃圾桶(Trash)机制
        HDFS默认情况下, 删除文件是永久删除的, 为了提高容错性, 我们可以开启HDFS的垃圾桶机制, 将永久删除改为 放文件到 垃圾桶中(类似于windows系统的 回收站)


小结

        HDFS作为Hadoop生态系统的核心组件,提供了可靠的、高吞吐量的分布式存储解决方案,适合于大规模数据的存储和处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值