HDFS体系结构及常见功能

本文详细介绍了HDFS的体系结构,包括NameNode、DataNode和SecondaryNameNode的角色与功能,以及HDFS的元数据管理和日志记录。此外,还讨论了HDFS的单点故障问题及解决方案,并阐述了HDFS的文件上传和下载过程,包括命令行操作和Java API的使用示例。
摘要由CSDN通过智能技术生成

本文主要是介绍HDFS的体系结构和常用操作,涉及到的知识点如下:

  1. HDFS的体系结构
  2. 数据上传
  3. 数据下载

HDFS的体系结构

Hadoop的生态圈,包括HDFS、Yarn、HBase都是主从结构。对于HDFS来说,它的主节点是NameNode,从节点是DataNode,还有一个更新最新状态的SecondaryNameNode,下面我们对这几个结点做详细的解释。

  1. NameNode:名称节点

    (1)职责:

    • 管理、维护HDFS;
    • 接收客户端的请求:上传、下载、创建目录等;
    • 维护两个非常重要的文件:edits文件 –> 记录了操作日志;fsimage文件 –> 记录HDFS元信息

    (2)HDFS操作日志:edits文件

    位置:find . -name edits* (在当前目录下查找以edits打头的文件)

    ​ 最新的操作日志以edits_inprogress***开头

    记录:Edits文件保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等

    都是二进制

    HDFS提供了一个工具:edits viewer 日志查看器,可以将操作日志转化为XML格式来查看。命令如下:

    hdfs oev 命令将日志(二进制)输出为XML文件 -i表示输入,-o表示输出
    hdfs oev -i edits_inprogress_0000000000000000208 -o ~/a.xml

    (3)HDFS的元信息:fsimage文件

    位置:和edits文件在一起

    记录:fsimage是HDFS文件系统存于硬盘中的元数据检查点,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息(数据块的位置、冗余信息)

    也是二进制

    HDFS提供了一个工具:image viewer查看器,可以将操作日志转化为文本或者XML格式来查看

    hdfs oiv 命令将日志(二进制)输出为文本文件 -i表示输入,-o表示输出
    hdfs oiv -i fsimage_0000000000000000207 -o ~/b.txt (文本)
    hdfs oiv -i fsimage_0000000000000000207 -o ~/c.xml -p XML(xml文件)
  2. DataNode:数据结点

    数据块大小:

    • 1.x版本 64M
    • 2.x笨笨 128M

    位置:find . -name blk*(blk是block的简写)

    一般原则:数据块的冗余度一般跟数据结点个数一致,最大不要超过3。在生产环境下,至少2个数据结点

    blk_*表示数据块

    blk_*.meta表示数据块的元信息

  3. SecondaryNameNode:第二名称结点

    作用:把edits中最新的状态信息合并到fsimage文件中,即日志合并。合并原理图如下。

    SecondaryNameNode合并元信息过程

    NameNode和SecondaryNameNode在一起的原因是为了效率问题,因为两者在一起,SecondaryNameNode在合并最新的edits到fsimage中时,只需要执行cp操作即可;在合并后,把最新的fsimage上传回NameNode下的fsimage

    什么时候合并?当HDFS发出检查点(checkpoint)的时候。默认会在两种情况下发出检查点:

    ​ (1)每隔60分钟。可通过修改参数,改变时间

    ​ (2)当edits文件达到64M。可通过修改参数,改变阈值

    补充:Oracle数据库中也有检查点,如果发生检查点,会以最高优先级唤醒数据库写进程(DBWn)把内存中的脏数据写到数据文件上(持久化)

    注意:NameNode和SecondaryNameNode名字看起来差不多,但是两者并没有什么关系

  4. HDFS存在的问题:

    (1)NameNode单点故障,即一旦出现问题整个系统就瘫痪

    ​ 解决方案:Hadoop1.0中,没有解决方案。

    ​ Hadoop2.0中,使用Zooker实现Name的HA(高可用性,后面会讲到)功能。

    (2)NameNode压力过大,且内存受限,影响系统扩展

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值