HDFS

HDFS

1.Hadoop的组成部分

HDFS:分布式存储系统, – 提供了 高可靠性、高扩展性和高吞吐率的数据存储服务

MapReduces:分布式计算系统, – 具有易于编程、高容错性和高扩展性等优点

Yarn:分布式资源管理框架.– 负责集群资源的管理和调度

2.HDFS数据存储架构

  • 字节数组
    • 文件都是由字节数组组成的
    • 我们可以将字节数组拆分成更小的数组
    • 在我们需要的时候,再将字节数组组装到一起
  • 拆分
    • 文件拆分后可以减少单个节点的压力…存储,传输,计算
  • 等分
    • 可以统一的设置数据的计算算法
    • 因为数据等大,所以每个节点得到的结果相差无几
    • 同一个的block必须是相等的.默认为128M,也可自定义配置.存储到不同的节点上,默认有3个副本
    • 但是不同文件的block大小是可以不同
    • block一旦被上传成功后是不可以被修改的
  • 安全
    • 因为数据是被切分成很多快的,一旦丢失其中一块,会导致整个文件的合并失败
    • 于是一个文件需要保留3个副本 replication
    • 副本不能放在同一个节点上
    • 副本数不要超过节点数
    • 副本越多的话,集群的成本就会越高
    • 副本数可以在上传后修改
  • 管理
    • 我们需要一个专门的节点来管理文件与块,块与节点的映射关系
    • 例如:上传一个1T的数据,集群总节点为5000个,每个块大小为1G,那么计算讲1000个块放入5000个节点中,当要使用这个文件时,需要从着5000个节点中寻找,所以我们才要一个专门的管理.
  • 注意事项
    • 文件上传后绝对不可以被修改.存储的信息包括日志,历史记录
    • 但是数据是可以被追加的
    • 不管文件有多大,都可以看成是128M

3.HDFS的组织结构*

在这里插入图片描述

  • NameNode
    • 保存
      • 数据的元数据信息,…会被持久化
      • 文件与块的映射信息,…会被持久化
      • 块与DateNode的映射信息
        • 不会被持久化
        • 每次关机的时候都不会被保存
        • 为了防止开机的时候有DateNode节点损坏或者数据文件损坏无法第一时间发现
    • 功能
      • 启动时
        • …合并fsimage和edits
        • 接受DateNode的汇报的本节点的信息
        • 收集这些信息整理
        • 如果某些块的副本数不够最小副本数,会讲这个副本在别的节点上创建并拷贝
      • 运行时
        • 和所有的DateNode保持心跳机制
        • 阈值:3秒.每三秒发送一次心跳.10分钟.如果超过10分钟节点都没有响应就认为lost,会将当前节点的所有数据迁移都其它节点上
    • 存储介质
      • 是一种完全基于内存存放数据的
      • 优点
        • 速度快
      • 缺点
        • 掉电易失,数据不能持久化
        • 内存是有限的
          • 如果NameNode的内存使用为100%,将无法继续进行其它工作
          • 一个大文件或者小文件对应的元数据信息基本相同
          • 如果存放过多小文件的时候就会导致元数据占用过多的内存
  • DateNode
    • 保存
      • 存放数据的数据信息
    • 功能
      • 启动时
        • 收集自身的数据块信息,汇报个NameNode
      • 运行时
        • 和NameNode保持心跳机制
    • 存储介质
      • 硬盘
  • SecondaryNameNode
    • 功能
      • 辅助NameNode进行镜像和日志的合并
    • 解决持久化的方案
      • 日志
        • 执行任何操作之前先记录日志
        • 启动之后根据日志的编号和数据的编号可以实现数据的前滚和后滚
        • 缺点:如果开机时间过长,会导致日志量太大,从而开机时间不可控
      • 镜像
        • 每次关机的时候拍摄快照
        • 下次启动直接读取快照信息即可
        • 每次关机时间有可能过长
        • 缺点:如果异常关机,有可能当前镜像没有被拍摄,导致数据丢失
        • 缺点:如果实时拍摄快照,会占用大量的内存
    • 解决方案
      • 日志+镜像
      • 当我们格式化NameNode节点的时候镜像就已经被创建了…fsimage
      • 当我们开启集群执行操作的时候就开始记录日志
        • edits_00000001-0000000009
        • edits_000000010-0000000066
        • edits_inprogress_0000067
      • 我们每执行一个增删改操作都会产生对应的一个日志,日志都会有一个自增的编号
      • 有一个文件脚趾seen_txid记录着下一个要合并日志的起点
      • 阈值…64M…3600s
      • 运行到达阈值时,讲日志文件和镜像文件都拷贝到SecondaryNamenode节点进行合并
      • 合并完成后再考回NameNode

4.文件

  • 元数据信息 stat
  • 数据信息 vim

5.文件权限

  • 权限完全可以按照Linux去理解
  • 并不是完全限制用户
  • 阻止好人做错事,不能防止换人做坏事

6.安全模式

  • NameNode启动时接受DateNode汇报的Block数据,检查是否达到最小副本数

7.机架感知

  • 是一种选择DateName节点的一种方式
  • 外部:资源丰富,业务不繁忙. …内部:当前节点
  • 和1节点处于不同机架的任意节点
  • 和2节点相同机架的不同节点
  • 和前N节点不同节点的任意节点

8.HDFS的有缺点*

  • 优点
    • 高容错性
      • 数据自动保存多个副本
      • 副本丢失后,自动恢复
    • 适合批量处理
      • 移动计算而非数据
      • 数据位置暴露给计算框架
    • 适合大数据处理
      • TB,甚至PB级数据
      • 百万规模以上的文件数量
      • 10K+ 节点
    • 可构建在廉价机器上
      • 通过多副本提高可靠性
      • 提供了容错和恢复机制
  • 缺点
    • 低延迟
      • 比如支持秒级反应,不支持毫秒级
      • 延迟与高吞吐率问题(吞吐量大但有限制于其延迟)
    • 小文件存取
      • 占用NameNode大量内存
      • 寻到时间超过读取时间
    • 并发写入,文件随机修改
      • 一个文件只能有一个写者
      • 仅支持append

9.HDFS的文件写入流程*

在这里插入图片描述

  • 宏观
    • 客户端向DFS发送请求,通过RPC调用namenode.create方法
    • namenode接受命令后检查权限路径等信息
      • 不能通过
        • 返回对应的异常
      • 通过
        • 创建一个空的Entry对象
        • 给DFS返回一个成功状态
    • DFS创建FS DateOutputStream对象给客户端使用
    • 客户端开始写出数据前首先向NameNode请求当前块要存放的DN
    • 假如NameNode返回的块的信息是(DN1,DN2,DN8)
    • 客户端开始建立管道(pipeline)…client–>dn1–>dn2–>dn8
    • 客户端写出一个块的大小为128M,但是客户端是按照packet(64k)为单位写出
    • 讲数据写出到管道,管道按照先后顺序开始传递数据,并等待响应
    • 当节点出现问题时就不会向下继续写数据而是直接返回错误状态
    • 如果packet传递到最后都没有产生错误,最后一个节点返回成功状态,开始向上一个节点传递
    • 包依次开始传递,当最后一个包传递完成,说明block传递成功
    • 将这个消息发送给NameNode,NameNode在Entry记录这个文件与块,块与DateNode的映射关系
    • 客户端继续请求下一个块的存放DN,NN(DN1,DN2,DN7)
    • 当最后一个块也传输完成.NameNode也会记录完最后一个块的信息
    • 关闭FSDateOutputStream
  • 微观
    • block
      • 128M
      • 一个文件可以切分成多个block
    • packet
      • 64k
      • 管道中传输时的数据的大小
    • Chunk
      • 512B
      • 数据块
      • 多个chunk组成了packet
    • checksum
      • 4B
      • chunk的验证结果
    • 首先讲客户端硬盘的数据读取到客户端的缓存中

10.HDFS读书的流程

在这里插入图片描述

  • 客户端向DFS发送读取数据的请求

  • DFS会将用户的请求发送给NameNode

  • NH查询用户的请求数据,检查是否存在权限等问题

    • 存在:返回对应的异常
    • 不存在:返回block与DN的映射
  • 客户端获取到block与DN的映射之后,直接选取最近的节点进行拷贝

  • 讲所有的block都获取到之后,合并成一个文件
    …(img-mdI8D40O-1574774827148)]

  • 客户端向DFS发送读取数据的请求

  • DFS会将用户的请求发送给NameNode

  • NH查询用户的请求数据,检查是否存在权限等问题

    • 存在:返回对应的异常
    • 不存在:返回block与DN的映射
  • 客户端获取到block与DN的映射之后,直接选取最近的节点进行拷贝

  • 讲所有的block都获取到之后,合并成一个文件

  • 关闭流

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值