阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop中HDFS读取文件的原理剖析

236次阅读
没有评论

共计 1333 个字符,预计需要花费 4 分钟才能阅读完成。

上一篇文章中简单介绍了一下 Hadoop 文件存储的一些逻辑与简单原理(见 http://www.linuxidc.com/Linux/2015-02/113638.htm),既然后写入,那肯定要读取分析数据咯,下面我在白话一下 hdfs 中文件读取的逻辑与简单原理。

第一步:跟写入文件一样,首先客户端会调用 DistributedFilesyStem 对象的 open()方法来打开文件,这个方法要做的事情就是:Distributed FilesyStem 会通过 RPC 协议连接来调用 namenode,namenode 里面存储的都是文件命名空间,也就是文件存储在 datanode 的地址,我们首先获取到要想读取的文件头所在的位置,块中存在很多个数据节点副本,hadoop 会根据一定的标准找到距离客户端最近的一个节点,此时便返回一个 FSData InputStream,否则返回 ioexception

第二步:紧跟着,客户端会读取返回去的文件输入流,此时文件头存储的 datanode 会自己寻找这些块中距离自己最近的其他 datanode,并且建立起链接,客户端持续 read,直到读取到块的末尾。从 namenode 中找到下一个块的地址,并找到最佳的文件节点位置。持续重复上面的动作。知道读取完成之后,文件输入流会调用 close 方法关闭流,

下面我们讨论下异常处理的机制:

如果客户端在读取数据流的时候遇到了错误块,怎么办眤?

如果客户端遇到了异常块,那么客户端就会记录下来这个块,并尝试去读取距离这个块最近的一个块,并且不会再去读取这个损坏的块。

同时客户端还会去校验接受到的数据的校验和,若发现一个损坏的块,它就会在客户端试图从别的数据节点中读取一个块的副本之前报告给名称节点。

在之前我们一直提到的 hadoop 的寻找最近的块或者节点的机制是如何实现呢?

我们都知道。在大数据存储中,限制效率的最主要因素就是带宽。
hadoop 将网络看成一棵树,两个节点间的距离是距离它们最近的共同祖先的总和。
对于以下每个场景,可用带宽依次减少:
相同节点中的进程
同一机架上的不同节点
同一数据中心的不同机架上的节点
不同数据中心的节点

Hadoop 中 HDFS 读取和写入的工作原理 http://www.linuxidc.com/Linux/2015-02/112775.htm

将本地文件拷到 HDFS 中 http://www.linuxidc.com/Linux/2013-05/83866.htm

从 HDFS 下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm

将本地文件上传至 HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm

HDFS 基本文件常用命令 http://www.linuxidc.com/Linux/2013-09/89658.htm

Hadoop 中 HDFS 和 MapReduce 节点基本简介 http://www.linuxidc.com/Linux/2013-09/89653.htm

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计1333字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中