HDFS的存储过程

大数据时代下,第三次信息化浪潮已开幕,大数据Hadoop体系技术愈发成熟。文中详细介绍了HDFS的存储过程,包括读文件流程,即client向namenode请求,再与datanode并行获取数据;写文件流程,涉及client请求、分块存储、信息交互及最终提交写操作。

随着大数据时代的到来,第三次信息化浪潮已经开幕了(15年一次),在第四次信息化浪潮的到来之前,各种新兴企业的兴起也愈发迅速,大数据HADOOP体系的技术也愈发成熟

HDFS存储过程

   有客户端发送提交请求,首先与namenode进行交互,然后namenode与datanode实时发送心跳(即ping),然后将文件切分成block进行上传,但是其实HDFS默认有三个机架,这里就先不讲机架感知策略,只要知道机架感知是存放副本的就行.上传block时,是将以比block的单元进行传输的(即chunk---最小的存储单元),当block上传到第一个datanode时,它就会默认复制三份(dfs.replication设置),以chunk传输完一个存储单元,后立即往下一个副本传递.利用了时间重叠技术;然后datanode以一张map映射表告知namenode的block存储情况.
 副本存放策略:
   默认有两种算法,一是namenode查询datanode(CPU,内存等信息),然后找一个资源充足的datanode节点存放副本.

(1) 读文件bai流程
1)client端发送读文件请求给namenode,如果文件不存在,返回错误信息,否则,将该文件对应的block及其所在datanode位置发送给client
2) client收到文件位置信息后,与不同datanode建立socket连接并行获取数据。
(2) 写文件流程
1) client端发送写文件请求,namenode检查文件是否存在,如果已存在,直接返回错误信息,否则,发送给client一些可用namenode节点
2) client将文件分块,并行存储到不同节点上datanode上,发送完成后,client同时发送信息给namenode和datanode
3) namenode收到的client信息后,发送确信信息给datanode
4) datanode同时收到namenode和datanode的确认信息后,提交写操作。

### HDFS存储机制、原理与架构 #### 1. **HDFS的核心概念** Hadoop分布式文件系统(HDFS)是一种专为大规模数据处理设计的分布式文件系统。其核心目标是提供高可靠性、高吞吐量的数据访问能力,适用于运行在廉价硬件上的大数据应用[^1]。 #### 2. **文件存储方式** HDFS采用分块存储的方式,即将大文件分割成固定大小的小块(Block),并将其分布到集群中的多个节点上进行存储。这种分块策略不仅提高了系统的并发性能,还增强了数据的可靠性和可扩展性[^2]。 #### 3. **分块大小配置** 默认情况下,HDFS中每个块的大小为128MB(可通过`dfs.blocksize`参数调整)。这一设置旨在平衡网络传输效率和磁盘I/O操作的成本。较大的块减少了元数据管理开销,同时也降低了频繁读写的频率。 #### 4. **名称节点(NameNode)的功能** 作为HDFS的主控组件之一,NameNode负责维护整个文件系统的命名空间以及数据块的映射关系。具体职责如下: - 维护文件系统树及其所有文件和目录的元数据; - 记录每个文件对应的块列表及其位置信息; - 控制客户端对文件的操作请求,如创建、删除或重命名等; - 管理副本数量以保障数据安全[^3]。 #### 5. **数据节点(DataNode)的角色** DataNode承担着实际存储数据的任务,在接收到来自NameNode分配的具体任务后执行相应动作,主要包括以下几个方面的工作流程描述: - 接收从客户端传来的待存储数据块,并按照指定路径保存至本地硬盘; - 定期向NameNode汇报自身的健康状态及所持有的数据块清单; - 根据指令参与复制过程或将多余副本移除以维持全局均衡状态[^4]。 #### 6. **数据写入流程概述** 当用户通过API提交一个新文件给HDFS时,会经历一系列复杂的内部交互步骤完成最终持久化落地的过程: - 首先由客户端将原始输入流切割成为若干个连续片段即Blocks; - 同步联系NameNode询问关于该新区间应该放置在哪几台机器之上; - 获取确认答复之后再逐一连接各个候选服务器依次传送过去直至全部结束为止。 ```python # 示例代码展示如何使用Python库pyhdfsHDFS交互 import pyhdfs fs = pyhdfs.HdfsClient(hosts='localhost', port=9000, user_name="root") def upload_file(local_path, hdfs_path): fs.copy_from_local(local_path, hdfs_path) upload_file("/local/path/to/file", "/hdfs/path/") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值