胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号。
目录
数据写入Hadoop HDFS的过程是一个分布式的操作,涉及多个组件和步骤。以下是一个清晰、归纳性的描述。
1.客户端发起写入请求
客户端首先通过调用DistributedFileSystem对象的create()方法来创建一个文件输出流对象,准备写入数据。
在Hadoop的HDFS中,DistributedFileSystem
类是一个关键的类,它代表了一个分布式的文件系统,并提供了与HDFS进行交互的API。
2.与NameNode交互
(1)DistributedFileSystem对象会向NameNode发起RPC调用,请求创建新文件。
(2)NameNode会检查该文件是否已经存在,并验证客户端是否有权限新建文件。
(3)如果检查通过,NameNode会为新建文件记录一条元数据信息;否则,文件创建失败,并向客户端抛出异常。
3.数据流的建立
(1)一旦NameNode同意创建文件,DistributedFileSystem会向客户端返回一个FSDataOutputStream输出流对象。
(2)客户端通过这个输出流对象开始写入数据。FSDataOutputStream内部封装了一个DFSOutputStream对象,该对象负责处理与DataNode和NameNode之间的通信。
4.数据的分割与写入
(1)当客户端调用FSDataOutputStream的write()方法写入数据时,DFSOutputStream会将数据分成一个个数据包(默认大小为64KB),并将这些数据包写入一个内部的数据队列(Data queue)。
(2)DFSOutputStream内部有一个DataStreamer类,用于请求NameNode分配新的数据块,并将数据块写入到DataNode。
5.数据块的复制与存储
(1)客户端向NameNode请求上传第一个数据块,并获得一个可用的DataNode列表。
(2)客户端选择一个DataNode作为数据管道的首个节点,并开始上传数据块。这个数据块会被复制到其他DataNode上(默认为3个副本),以实现数据的冗余和容错。
(3)此过程重复进行,直到所有数据都被写入并复制到多个DataNode上。
6.写入完成
(1)一旦所有数据块都成功上传,客户端会通知NameNode文件写入完成。
(2)NameNode更新文件的元数据信息,包括数据块的位置和副本信息。
7.关闭资源
数据写入完成后,客户端关闭FSDataOutputStream输出流对象,释放相关资源。
这个过程是HDFS分布式文件系统的核心功能之一,它确保了数据的高可靠性和容错性。通过将数据分割成多个数据块,并复制到多个DataNode上,HDFS能够在部分节点发生故障时仍然保持数据的完整性和可用性。
标签:HDFS,写入,Hadoop,DataNode,NameNode,数据,客户端 From: https://blog.csdn.net/huxian1234/article/details/139269371