HDFS体系结构及常见功能

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要是介绍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压力过大,且内存受限,影响系统扩展

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

    ​ Hadoop2.0中,使用NameNode的联盟实现其水平扩展

HDFS上传

先来一张HDFS文件上传的流程图:

HDFS文件上传

看完

### 关于头歌大数据系统的HDFS应用及其相关内容 #### HDFS在Hadoop体系结构中的角色 HDFS(Hadoop Distributed File System)作为Hadoop生态系统的核心组件之一,在整个架构中扮演着存储层的角色[^1]。它通过提供高吞吐量的数据访问能力,支持大规模数据集的分布式处理需求。HDFS的设计目标是实现容错性和可靠性,即使硬件发生故障也能保障数据的安全性。 #### 常见HDFS操作及Java API实践 为了更好地利用HDFS功能,开发者可以通过其提供的Java API完成多种文件操作任务。例如,创建目录、上传下载文件以及读写数据流等基本功能都可以借助API来实现[^2]。下面是一个简单的代码示例展示如何使用HDFS Java API将本地文件复制到HDFS上: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HDFSCopyExample { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path src = new Path("/local/path/to/file"); // 本地路径 Path dst = new Path("hdfs://namenode:8020/remote/path/in/hdfs"); // HDFS路径 fs.copyFromLocalFile(src, dst); // 将本地文件拷贝至HDFS fs.close(); // 关闭连接 } } ``` 此代码片段展示了如何配置并初始化FileSystem对象,进而调用`copyFromLocalFile()`方法把指定的本地文件传输到远程HDFS位置[^4]。 #### 使用Ambari简化部署与管理流程 对于实际生产环境下的复杂集群而言,手动配置和维护可能会非常繁琐。因此,像Hortonworks这样的厂商提供了基于Web界面的工具-Ambari,用于自动化安装、管理和监控Hadoop平台上的服务[^3]。这不仅提高了工作效率,还降低了人为错误的风险。 #### 总结 综上所述,学习掌握HDFS的基础理论知识及其对应的开发技能是非常重要的。无论是理解它的内部工作机制还是熟悉具体的应用场景和技术细节,都将有助于未来从事相关领域工作的职业发展^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值