HDFS中读写过程的示例分析
小编给大家分享一下HDFS中读写过程的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
10年积累的成都网站设计、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有琼结免费网站建设让你可以放心的选择与我们合作。
读文件的过程
1 客户端(client)用 FileSystem 的open() 函数打开文件
2 DistributedFileSystem 用RPC 调用元数据节点,得到文件的数据块信息 。对于每一个数据块,元数据节点返回保存数据块的数据节点的地址 ,DistributedFileSystem 返回FSDataInputStream给客户端,用来读取数据。
3 客户端调用stream的read() 函数开始读取数据 ,DFSInputSteam 连接保存此文件第一个数据块的最近的数据节点
4 Data 从数据节点读到客户端(client) ,当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。
5 当客户端读取完毕数据的时候,调用FSDataInputStream 的close()函数
在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。
失败的数据节点将被记录,以后不再连接。
自简单总结 : client 用FileSystem open 打开文件---> FileSystem从namenode 获取文件的bloc location位置 返回 FSDataInputStream 给client ----> client 利用 FSDataInputStream 读取数据 --->每读完一个数据块关闭与此 datanode的连接 ---->直到文件所有数据块 读完,关闭 FSDataInputStream 的close()
写文件的过程
1、客户端调用create()来创建文件
2、 DistributedFileSystem 用RPC 调用元数据元数据节点,在文件系统的命名空间创建一个新的文件。
元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建文 件。 DistributedFileSystem 返回DFSOutputStream 客户端用于写数据
3、 客户端开始写入数据,DFSOutputStream 将数据分成块,写入 data queue 。
4、 Data queue 由 Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块) 分配的数据节点放在一个pipeline里 。也即 (DFSOutputStream写入 data queue里的block 即将要写入pipeline 中的数据节点上 ,这块的读写数据工作是由Data Streamer来负责的)
Data Streamer 将数据块写入pipeline中的 第一个数据节点。 第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。依次。。
5、DFSOutputStream 为发出去的数据块保存了 ack queue ,等待pipeline中的数据节点告知数据已经写入成功。
如果数据节点在写入的过程中失败:
关闭pipeline ,将ack queue 中的数据块放入 data queue的开始
当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据时过期的,会被删除。
失败的数据节点从pipeline 中移除,另外的数据块则写入pipeline中的另外两个数据节点。
元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份
6、当客户端结束写入数据,则调用stream 的 close函数 。此操作将所有的数据块写入 pipeline中的数据节点,并等待ack queue 返回成功 。最后通知元数据节点写入完毕。
自总结
client create --> FileSystem create调用namnode 创建 fsimage文件 --> 返回DFSOutputStream给客户端 ---> 客户端利用DFSOutputStream 开始 将block(数据分块)写入data queue里
--->Data Streamer来负责从data queue取数据写入pipeline (数据节点列表)--->DFSOutputStream 等待pipeline 返回的ack queue -->最后通知元数据节点写入完毕
安全模式
1:Name 启动的时候首先将fsimage(镜像)载入内存,并执行(replay)编辑日志editlog的各项操作
2:一旦内存中建立文件系统元数据映射,则创建一个新的fsimage 文件(这个过程不需要secondaryNamenode)和一个空的editlog
3:在安全模式下 ,各个 datanode 会向namenode发送块列表的最新情况
4:此刻namenode 运行在安全模式 。即 namenode 的文件系统对于客户端来说是只读的(显示目录,显示文件内容等 ,写,删除 ,重命名都会失败)
5:NameNode 开始监听RPC 和HTTP请求
解释RPC:RPC(Remote Procedure Call Protocol)——远程过程通过协议,它是一种通过网络从远程
计算机程序上请求服务,而不需要了解底层网络技术的协议.
6: 系统中数据块的位置并不是由namenode 维护的,而是以列表形式存储在datanode 中
7: 在系统的正常操作期间,namenode 会在内存中保留所有块信息的映射信息(块在datanode什么位置)
8 : 进入和离开安全模式:
查看namenode处于哪个状态
hadoop dfsadmin -safemode get
进入安全模式(hadoop启动的时候是在安全模式)
hadoop dfsadmin –safemode enter
离开安全模式
hadoop dfsadmin -safemode leave
看完了这篇文章,相信你对“HDFS中读写过程的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
当前文章:HDFS中读写过程的示例分析
标题来源:http://ybzwz.com/article/jphdpo.html