HDFS架构,特点和基本操作

HDFS设计前提与目标
 硬件容错
 流式数据访问
 超大规模数据集
 简单一致性模型

  • 一次写入多次读取
     移动计算比移动数据便宜

HDFS架构
 主从架构(master/slave)
 两个重要进程:namenode和datanode
在这里插入图片描述

HDFS数据存储
 冗余备份(备份因子可配置,默认为3)
 每个文件按字节切为128m的block(hadoop1为64m)
在这里插入图片描述

 冗余数据保存

  • 加快数据传输速度
  • 容易检查数据错误
  • 保证数据可靠性
    在这里插入图片描述

Namenode (就像宿舍管理员)
 在hdfs中,namenode负责管理分布式文件系统的命名空间
 执行文件系统命名空间操作,如打开,关闭和重命名文件和目录
 控制客户端对文件的访问
 它还决定blocks到datanode的映射,记录了每隔文件中各个块所在的数据节点的位置信息
在这里插入图片描述

 Namenode保存元数据(metadata)

  • 元数据是描述数据的数据,主要是描述数据属性的信息
  • 包括:文件信息,文件块的信息和位置,文件的访问权限,集群中文件的数量,集群中datanode的数量

Namenode还保存了两个核心的数据结构,即fsimage(镜像文件)和editlog(操作文件
 Fsimage用于维护文件系统树以及文件树种所有文件和文件夹的元数据
 操作日志文件editlog中记录了所有针对文件的创建,删除,重命名等操作
在这里插入图片描述

Datanode
 文件系统中真正存储数据的地方

  • 一个block在datanode以文件形式存储在磁盘上,包括两个文件:一个数据本身,一个是元数据(包括数据块的长度,块数据的校验和时间戳)
  • 客户端或者namenode可向datanode请求写入或读出block(数据块),存储路径由dfs.datanode.data.dir指定
  • 在这里插入图片描述

 按照客户端请求,执行在文件系统上的读写操作
 根据namenode的指令执行block的创建,删除和备份
 向namenode定期发送自己所存储的块的列表

Namenode启动过程和安全模式
Namenode启动过程

  1. 启动hdfs,首先进入安全模式
  • 此时,NN运行处于safemode,即hdfs对于client来说时只读的
  1. 执行check-point检查点
  • 首先将fsimage载入到内存
  • 然后逐一执行edits文件中各项操作
  • 一旦在内存中成功建立hdfs最新的元数据映像,就会将最新的元数据flush到本地磁盘,生成一个新的fsimage文件
  1. 获得block块信息,建立block和DN的映射
  • Check-point完成后,NN开始监听RPC和HTTP请求
  • Namenode从所有datanode接手心跳信号和块状态报告,块状态报告包括了某个namenode上所有的数据块列表
  1. 退出安全模式
  • NN只有获取到整个文件系统中有99.9%(可以配置的)的块满足最小副本(加上一个额外的30s等待时间),才会自动退出安全模式
  • NN对外提供写服务

Namenode本身只存储镜像文件和操作日志,不存储datanode和block的映射关系,它只会通过datanode心跳传递过来的这些映射关系,将这些关系建立起来,保存在内存当中。

Secondary namenode
Namenode运行期间editlog不断变大的问题
 SecondaryNamenode(SNN)是HDFS架构中一个组成部分,它用来保存namenode中对hdfs元数据信息的备份,并减少namenode重启的时间
 Secondary namenode节点处理镜像文件和事务日志
在这里插入图片描述

单点故障问题
 HA(高可用)

  • Hadoop集群中,namenode节点存储hdfs上所有文件和目录的元数据信息
  • 如果namenode挂了,也意味着整个hadoop集群无法使用
    高可靠:block块在hadoop存储的冗余备份

Hdsf写文件剖析
在这里插入图片描述

 Block块副本选址策略

  • 第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点
  • 第二个副本:放置在与第一个副本不同的机架节点上
  • 第三个副本:与第二个副本同一机架的另一个节点上
  • 更多副本:随机节点
    在这里插入图片描述

 写过程的故障检测与恢复

  • HDFS的恢复过程有助于实现容错;它不仅涉及到块,还涉及到管道;在HDFS中,有三种recovery
  1. Lease recovery(租约)
  2. Block recovery(块)
  3. Pipeline recovery(流水线)
    租约恢复:租约是hdfs用来保证对文件的独占写访问的一种方法,它保证在一段时间内只对一个客户有效,若客户仍需处理该文件,则必须定期更新租约
    块恢复:确保租用文件的最后一个块的所有副本有相同的长度;block恢复只有在租约恢复时被触发,且租约恢复只会触发一个文件的最后一个block进行block恢复。

Hdfs读剖析
在这里插入图片描述
在这里插入图片描述

 文件完整性

  • 网络传输和磁盘错误等因素,会造成数据错误
  • 在文件被创建时,客户端对每个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件中(crc32校验)
  • 当客户端读取文件时,会利用该信息文件对每个读取的数据块进行校验(出错:请求另一个DN,报告给NN)
    备份每个分块文件;分块冗余,本地校验

文件删除剖析
在这里插入图片描述

HDFS特点
 廉价的商用机器
 高容错性保障机制

  • 冗余副本策略
  • 机架策略
  • 心跳机制
  • 安全模式
  • 校验
  • 回收站
  • 元数据保护

HDFS适用场景
 高容错性

  • 数据自动保存多个副本
  • 副本丢失后,自动恢复
     适合批处理
  • 移动计算而非数据
  • 数据位置暴露给计算框架
     适合大数据处理
  • GB,TB,甚至PB级数据
  • 百万规模以上的文件数量
  • 10k+节点规模
     流式文件访问
  • 一次性写入,多次读取
  • 保证数据一致性
     可构建在廉价机器上
  • 通过多副本提高可靠性
  • 提供了容错和恢复机制

HDFS不适用场景
 低延迟数据访问

  • 比如毫秒级
  • 低延迟与高吞吐量
     小文件存取
  • 占用namenode大量内存
  • 寻道时间超过读取时间
     并发写入,文件随机修改
  • 一个文件只能由一个写者
  • 一次写入,多次读取
  • 仅支持append

HDFS操作
 访问hdfs有多种方式

  1. Shell命令行
  2. JavaAPI编程

Hdfs是模拟linux文件系统,因此很多hdfs命令和linux命令很像
Hdfs常用命令
Ex:
Hdfs dfs –help
Hdfs dfs –ls
Hdfs dfs –mkdir /aaa
Hdfs dfs –put word.txt /aaa/ 将word.txt文件上传到/aaa/文件夹后
Hdfs dfs –get /aaa/word.txt abc.txt 将文件下载道abc.txt
Hdfs dfs –cat /aaa/word.txt 浏览word.txt文件内容

Jps: 查看hdfs集群是否启动

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值