hdfs读写数据的工作机制

来源:互联网 发布:sql注入攻击语句 编辑:程序博客网 时间:2024/06/07 14:34

1.1 概述

1. HDFS集群分为两大角色:NameNodeDataNode  (Secondary Namenode)

2. NameNode负责管理整个文件系统的元数据

3. DataNode 负责管理用户的文件数据块

4. 文件会按照固定的大小(blocksize=128M)切成若干块后分布式存储在若干台datanode

5. 每一个文件块可以有多个副本,并存放在不同的datanode

6. Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量

7. HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

 

1.2 HDFS写数据流程

1.2.1 概述

客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件blockdatanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到blockdatanode负责向其他datanode复制block的副本


1.2.3 详细步骤解析

1.初始化FileSystem,客户端调用create()来创建文件

2.FileSystemRPC调用元数据节点,在文件系统的命名空间中创建一个新的文件,元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。

3.FileSystem返回DFSOutputStream,客户端用于写数据,客户端开始写入数据。

4.DFSOutputStream将数据分成块,写入data queuedata queueData Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。

5.DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。


 

1.3. HDFS读数据流程

1.3.1 概述

客户端将要读取的文件路径发送给namenodenamenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件

1.3.2详细步骤图


1.3.3 详细步骤解析

1.初始化FileSystem,然后客户端(client)FileSystemopen()函数打开文件

2.FileSystemRPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。

3.FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用streamread()函数开始读取数据。

4.DFSInputStream连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端(client)

5.当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。

6.当客户端读取完毕数据的时候,调用FSDataInputStreamclose





原创粉丝点击