第三章 HDFS分布式文件系统

本文详细介绍了HDFS的核心概念,包括其优点和缺点、体系结构、关键特性和读写流程。重点讲解了NameNode、DataNode的功能以及数据块复制、机架感知和数据完整性等特性。同时,还涉及了HDFS的使用实例和常用命令。
摘要由CSDN通过智能技术生成

1、HDFS概述

1.1 概念

HDFS(Hadoop Distributed File System,分布式文件系统)是Hadoop大数据生态系统的底层核心,提供了大数据分布式存储的支持,HDFS是为处理超大数据集(Large Data Set)的应用需求而设开发的,对高吞吐量大规模文件操作带来了很多便利。

1.2 优点

高容错性;高效性;流式数据访问;适合大数据处理;简单的文件模型;跨平台兼容性。

1.3 缺点

低延时数据访问受限;不适合小文件存储;不适合并发写入;不支持修改文件。

2、HDFS体系结构

2.1 体系结构图

2.2 Block数据块  

 2.0之前版本数据块大小默认64M,2.0以后为128MB,一个文件多块,以块为单位。

可以最小化寻址开销;支持大规模文件存储;简化系统设计;适合数据备份。

2.3 Client客户端

  • 客户端是用户操作常用方式,部署都有客户端;
  • 客户端是个库,包括文件系统接口;
  • 支持打开、读取、写入等常见操作,提供类似Shell的命令行方式访问数据;
  • 提供了Java API,作为应用程序访问文件系统的客户端编程接口;
  • 是Hadoop内置操作HDFS的库。

2.4 NameNode名称节点功能

在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即Fslmage和EditLog。

Fslmage文件包含文件系统中所有目录和文件inode的序列化形式。其用于维护文件系统树,以A及文件树中的文件和文件夹中的元数据。

EditLog记录针对文件的创建、删除、重命名等更新操作,NameNode启动时,Fslmage会被加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。

2.5 DataNode数据节点功能

数据节点(DataNode)是分布式文件系统HDFS的工作节点,负责数据的存储和读取,系统会根据客户端请求或者是名称节点的调度来进行数据的存储和检索,并且向名称节点(NameNode)定期发送自己所存储的快的列表。
数据节点(DataNode)是文件系统中真正存储数据的地方。

客启端(Client)或者名称节点(NameNode)可以向数据节点(DataNode)请求写入或者读出数据块,数据节点(DataNode)会周期性的向名称节点(NameNode)回报其存储的数据块的信息。

2.6 SecondaryNameNode第二名称节点功能

SecondaryNameNode是HDFS架构中的一个组成部分,它是用来保存名称节点(NameNode)中对HDFS元数据信息的备份并减少名称节点重启的时间,主要功能就是周期性将名称节点 (NameNode) 的镜像文件和修改日志(EditLog)合并,以防日志文件过大。SecondaryNameNode一般是单独运行在一台机器上。

SecondaryNameNode不是NameNode节点出现问题时候的备用节点,它和NameNode节点负责不同的事情.

 3、HDFS关键特性

3.1 数据块复制特性

HDFS靠大机器的大集群进行存储超大文件,存为一系列的Block进行分散保存,除了最后一块,所有的数据块大小相同。

一般,副本系数是3,分别存在本地机架,同一机架另一个节点,不同机架节点上,实现复制。

3.2 机架感知(Rack-Aware)

概念:集群中不同机架上机器之间通讯需要经过交换机,名称节点能将数据块副本复制存放在不同机架的数据节点上。

优点:防止整个机架失效数据丢失;读数据时均匀分布集群,实现负载均衡。

缺点:一个写操作需要传输数据快到多个机架,增加了写的代价。

3.3 集群均衡策略

Hadoop启动balancer任务后,集群自动读取各个节点磁盘使用情况,根据设置的主机空间使用率差值来进行计算从远超该平均值的节点数据开始往空间使用率低于该平均值的主机开始进行数据复制,一旦复制完成之后将删除原节点数据,以达到集群负载均衡的目的。

3.4 数据完整性

HDFS文件内容的校验和(Cheakaum检查点机制,实现了当客户端创建新的HDFS文件,会计算该文件每个数据块的校验和并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件后,它会检验从数据节点(DataNode)获取的数据跟相应的校验和文件中的校验和是否匹配。如果不匹配,则客户端可以选择从其他DataNode获取该数据块的副本确保获取到的数据是完整的。

3.5 快照(Snapshot)

概念:HDFS在某一时间点对指定文件进行拷贝。
作用:HDFS快照是在建立文件系统的索引,新开辟一个空间用来保存更改的文件一旦有了快照,不管后面文件目录发生什么变化,都可以通过快照恢复到某-时刻的文件和文件目录结构。因为快照采用的是只读模式,可以对重要数据进yy045692行恢复、防止用户错误性的操作

4、HDFS读写流程

4.1 HDFS写数据流程

4.2 HDFS读数据流程

5、HDFS应用实例

HDFS常用命令

分布式文件系统架构说明 - fastdfs-client(FastDFS 客户端) fastdfs提供的java客户端api,java相关功能都基于这个基础上封装,扩展,第三方应用不需要关心该接口. - fastdfs-core(HTTP服务器) 基于spring boot实现,提供http接口服务. 提供http服务器信息获取,http上传,http下载,删除上报,该服务会记录文件的基本信息,其中服务器信息获取,上传上报都由fastdfs-app自动完成,第三方应用不需要关心. - fastdfs-app(Apply SDK) 初始化 APIConfigure config = new APIConfigure("appKey", "httpServerUrl"); DFSAppClient.instance().initAPIConfigure(config); 实现执行初化操作,从fastdfs-core获取trackers服务器信息,及appKey对应的groupName, 这些动作都由SDK自动完成,第三方应用不需要关心. 上传文件 String fileId = DFSAppClient.instance().uploadFile(new File("文件绝对路径")); fileId:返回的fileId字符串,示例:group1/M00/00/00/wKgABFuOVJyEPGKEAAAAADUuUeE339.png fileId是后续对文件进行操作的基本参数,第三方应用拿到该值后应本地做好保存. 下载文件 FileOutputStream fos = new FileOutputStream(new File("文件绝对路径")); DFSAppClient.instance().downloadFile(fileId, fos, true); fileId:上传文件成功后返回的fileId字符串. 删除文件 int result = DFSAppClient.instance().deleteFile(fileId); fileId:上传文件成功后返回的fileId字符串. result:该方法会返回0表示删除成功,其他表示失败. fastdfs 下载示例说明 http://127.0.0.1:8808/dfs/v1/download?fileId=group1/M00/00/00/wKgABFuQ2PWEbNsOAAAAADUuUeE667.png&direct=true fileId:上传文件成功后返回的fileId字符串. direct:表示是否直接显示,非直接显示会提示下载,默认是非直接显示.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值