Hadoop之HDFS

HDFS的概念和特性
HDFS的命令行操作
HDFS工作机制
HDFS写数据流程
HDFS读数据流程
Namenode工作机制
Checkpoint
Safemode

HDFS的概念和特性

  • 首先,它是一个文件系统,用于存储文件,通过统一的命名空间—目录树来定位文件
  • 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色
  • 重要特性如下
    • HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本是64M
    • HDFS文件系统会给客户端提供统一的抽象的目录树,客户端通过路径来访问文件,如:hdfs://namenode:port/dir_a/file
    • 目录结构及文件分块位置信息(元数据)的管理由Namenode节点承担
      Namenode是HDFS集群主节点,负责维护整个HDFS文件系统的目录树,以及每个文件路径所对应的block块信息(block id ,及所在的datanode服务器)
    • 文件的各个block的存储管理由Datanode节点承担
      datanode是HDFS集群的从节点,每个block都可以在多个datanode上存储多个副本(副本数量也可以通过参数设置dfs.replication,默认3
    • HDFS是适应一次写入,多次读出的场景,且不支持文件的修改
  • 注:适合用来做数据分析,并不适合用来做网盘应用
  • 原因:不便修改,延迟大,网络开销大,成本太高

HDFS的命令行操作

  • 从本地剪切粘贴到hdfs
    -moveFromLocal
  • 从hdfs剪切粘贴到本地
    -moveToLocal
  • 追加一个文件到已经存在的文件末尾
    -appendToFile
  • 从本地文件系统拷贝到hdfs
    -copyFromLocal
  • 从hdfs拷贝到本地
    -copyToLocal
  • 合并下载多个文件
    getmerge
  • 设置hdfs中文件的副本数量
    -setrep
    ex:hadoop fs -setrep 数 文件路径
  • 查看集群工作状态
    hdfs dfsadmin -report

HDFS工作机制

  • HDFS集群分为两大角色:NameNodeDataNodeSecondaryNode
  • NameNode负责管理整个文件系统的元数据
  • DataNode负责管理用户的文件数据块
  • 文件会按照固定的大小blocksize切成若干块后分布式存储在若干台DataNode
  • 每个文件块可以有多个副本,并存放在不同的DataNode
    *DataNode会定期向NameNode汇报自身所保存的文件block信息,而NameNode则会负责保持文件的副本数量
  • HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向NameNode申请来进行

HDFS写数据流程

  • Client与NameNode通信请求上传文件NameNode检查目标文件是否已存在,父目录是否存在
  • NameNode返回是否可以上传
  • client请求第一个block该传输到哪些DataNode服务器
  • NameNode返回3个DataNode服务器ABC
  • client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成,以packet为单位,A收到一个packet就会传给BB传给C,A每传一个packet就会放入一个应答队列等待应答
  • 当一个block传输完成之后,client再次请求NameNode上传第二个block的服务器

HDFS读数据流程

  • ClientNameNode通信查询元数据,找到文件块所在的DataNode服务器
  • 挑选一台DataNode就近原则,然后随机)服务器,请求建立socket流
  • DataNode开始发送数据(从磁盘读取数据放入流,以packet为单位来做md5校验
  • client以packet为单位接收,先在本地缓存(因为还没接受完整个文件),然后写入目标文件直到所有块都接收成功返回给客户端
  • 注:就近原则
    网络拓扑中最近的一台机器
    备份除了本机一份,与本机同机架一份,另一个机架一份,默认三份

Namenode工作机制

  • NameNode职责
    • 负责客户端请求的响应
    • 负责元数据管理
      • 目录树
      • DataNode信息池
  • 元数据管理
    NameNode数据的管理采用三种存储形式
    • 内存元数据NameSystem
    • 磁盘元数据镜像文件fsimage
    • 数据操作日志文件edits
  • 元数据存储机制
    • 内存中有一份完整的元数据matedata
    • 磁盘有一个准完整元数据镜像,文件在NameNode工作目录中
    • 操作日志用于衔接内存和持久化数据镜像
  • 注:当客户端对HDFS中的文件进行新增或者修改操作,操作记录首先记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存matedata中
  • 元数据checkpoint
    每隔一段时间,会由SecondaryNameNode上积累所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge,这个过程称为checkpoint

Checkpoint

  • checkpoint操作触发条件可配置

    • 时间间隔
      dfs.namenode.checkpoint.period=3600单位s

    • 操作记录间隔
      dfs.namenode.checkpoint.txns=1000000

  • checkpoint附带作用
    NameNodeSecondaryNameNode工作目录存储结构完全相同,当NameNode故障退出需要重新恢复时,可以从SeconaryNameNode的工作目录中将fsimage拷贝NameNode的工作目录,以恢复NameNode的元数据


Safemode

  • NameNode发现集群中block丢失率达到一定比例0.01%会进入安全模式safemdoe,在安全模式下,客户端不能对任何数据进行操作,只能查看元数据信息
  • 在HDFS冷启动时,NameNode会在safemode状态下维持一段时间,等待自动退出安全模式即可

    原理:NameNode的内存元数据中,包含文件路径,副本数,blockid及每个block所在DataNode的信息,而fsimage中,不包含block所在DataNode信息。那么,当NameNode冷启动时,此时内存中的元数据只能从fsimage中加载而来,从而就没有block所在的DataNode信息——>导致NameNode认为所有的block都已经丢失——>进入安全模式——>DataNode启动后,会定期向NameNode汇报自身所持有的blockid信息 ——>随着DataNode陆续启动,从而陆续汇报block信息NameNode就会将内存元数据中block所在DataNode信息补全更新——> 找到所有block的位置,从而自动退出安全模式

  • 手动退出
    safemode:hdfs namenode --safemode leave
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值