Hadoop之HDFS

Hadoop之HDFS

1.HDFS概述

  • HDFS(hadoop distributed file system)

    一个分布式的文件系统,用于存储文件。适合一次写入,多次读出的场景。

    • 优点:

      1. 高容错性:多个副本保证数据安全

      2. 适合处理大数据:存储规模大,PB级别。文件规模大,百万级。

      3. 部署要求低:可以运行在廉价服务器上

    • 缺点:

      1. 不适合低延时数据访问。访问速度相对较慢
      2. 无法高效存储小文件。原因是小文件过多会使得NameNode存储过多元数据信息。NameNode运行在内存中,资源有限。同时过多小文件也会导致寻址时间过长,影响效率。
      3. 不支持并发写入和随机修改。只支持单个写入,不支持多线程写。仅支持数据append追加。不支持随机对数据进行修改。

2.HDFS组成架构

1.NameNode:

  • 管理HDFS的命名空间
  • 配置副本策略
  • 管理数据块block的映射信息
  • 处理客户端client的读写请求

2.DateNode

  • 存储时机数据,即数据块block
  • 执行数据块的读写操作

3.Client

  • 切分要上传的数据块,再进行上传
  • 于NameNode交互,获得文件位置信息进行读写操作
  • 提供命令管理HDFS,实现格式化,增删改查等

4.Secondary NameNode

  • 辅助NameNode,定期合并FSimage和Edits文件
  • 紧急情况下,辅助恢复NameNode

3.HDFS块大小的设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UYiSwf1q-1626603946394)(C:\Users\Jzs\AppData\Roaming\Typora\typora-user-images\image-20210715163345756.png)]

  • HDFS中,文件以块Block的方式存储。大小可以通过参数(dfs.blocksize)设置,在hadoop2.x和3.x中默认为128M,1.x版本中默认为64M。

  • 块大小设置的理由:

    如果block设置太大会导致磁盘传输时间过长,远大于在NameNode中的寻址时间。导致处理block过慢。

    如果block设置太小,会增大NomeNode的压力,寻址时间过长。

  • 因此,按照最佳比例,block设置应该最接近磁盘的传输速率为益。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-023uktef-1626603946396)(C:\Users\Jzs\AppData\Roaming\Typora\typora-user-images\image-20210715163800893.png)]

4.HDFS的读写流程

1.HDFS的写数据流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-egM7fsnS-1626603946396)(C:\Users\Jzs\AppData\Roaming\Typora\typora-user-images\image-20210715164015663.png)]

  1. 客户端通过Distributed FileSystem向NameNode请求上传文件。

  2. NameNode检查元数据信息,以及该客户端是否具有写权限。若有则返回数据流对象。

  3. Client将数据切分为128M的block,请求写入的DateNode地址。

  4. NameNode返回节点信息。Client和DataNode建立pipeline管道,通过流对象向DataNode写入以packet为单位的数据。DataNode再与第二个副本的DateNode建立pipeline连接,传输数据。以此类推,所有副本建立连接并传输packet数据。

    (Packet默认为64KB,是client向DataNode传输的基本单位。同时每个packet包含一个chunk,默认为512B+4B的校验位,用作数据传输校验)

  5. 每个block传输完成后每个DateNode逐级返回ack应答。确认后继续下一个block写入。

  6. 待数据全部写完后关闭流对象。

2.节点距离的计算-网络拓扑

  • 通过网络拓扑计算节点之间的距离,即机架感知,选择副本存储的节点。

  • 第一个副本存储在client所处的节点上,如果client不在集群上则随机选择,

    第二个副本存储在另一个机架上随机节点,第三个副本存储在第二个机架上随机节点。

3.HDFS读流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJuoDFDG-1626603946398)(C:\Users\Jzs\AppData\Roaming\Typora\typora-user-images\image-20210715170617354.png)]

  1. Client通过Distributed FileSystem向NameNode申请读数据。
  2. NameNode检查client权限,符合则查询元数据获得数据实际四肢即DateNode地址并返回数据流对象。
  3. Client根据规则遵照最近节点读取数据。数据传输以packet为单位,同时每个packet包含一个chunk,默认为512B+4B的校验位,用作数据传输校验。
  4. Client接收数据后先缓存在内存中,然后再写入目标文件
  5. 关闭流对象

5.NameNode和SecondaryNameNode

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6yHAkYL-1626603946399)(C:\Users\Jzs\AppData\Roaming\Typora\typora-user-images\image-20210715171908906.png)]

  • 元数据由于访问效率要求高,数据存储在内存中。为了保证数据安全,在磁盘中建立了元数据备份FsImage。为了提高效率还建立了Edits文件追加最新操作信息。Secondary NameNode通过定期合并FsImage和Edits。保证数据安全。
  • 合并时间默认为每1小时或操作数达到100万次时。

6.DataNode的工作机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p7tRVVzu-1626603946399)(C:\Users\Jzs\AppData\Roaming\Typora\typora-user-images\image-20210715171851465.png)]

  • 一个block数据块在DataNode以文件的形式存储在磁盘上,包含两个文件。一个是数据本身,另一个是元数据(block长度,校验和,时间戳等)。
  • DataNode启动后每向NameNode注册,通过后每6小时向NameNode上报block信息。
  • 每三秒DateNode向NameNode返回一个心跳信息。返回结果是收到命令如复制数据到其他节点,删除block等。如果NameNode超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
  • 集群在运行过程中可以安全加入或退出一些机器。
    向NameNode返回一个心跳信息。返回结果是收到命令如复制数据到其他节点,删除block等。如果NameNode超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
  • 集群在运行过程中可以安全加入或退出一些机器。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值