HDFS的读过程
Posted 阿木公的阳小山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS的读过程相关的知识,希望对你有一定的参考价值。
HDFS的数据读写过程几乎成为了一道应届生大数据岗的必问题。
我们说过,NameNode保有元数据,是HDFS的管理者,这意味我们对HDFS的操作必须要先经过NameNode的许可,并获得要操作的数据的信息。
同样,我们也说过,DataNode保有具体的数据,是HDFS指令的具体践行者。这意味着,读写指令的实际执行者是DataNode。
我们还提到,Client与HDFS的具体数据的交互过程并不经过NameNode。
有了这三条,我们应该可以勾勒出一个大概的交互的过程:
首先,Client应当先和NameNode交互获得许可还有要读写的DataNode上的数据块信息。
其次,拿到许可和数据块信息的Client就会去寻找具体的DataNode。
Client和DataNode交互,进行数据传输。
有了这些讨论,我们来看具体的读写流程。今天先看读流程。
所谓具体的读流程,应该就是在上述的三步交互过程的基础上添加一些属于读过程的具体细节。
我们先看本地的操作系统中,一个简单的读流程应该是怎么样的。首先,我们需要知道文件的全路径名,通过全路径访问到这个文件,读取文件中的数据。在HDFS中这个过程应该是类似的。示意图如下:
客户端首先需要获取到FileSystem的一个实例,这里就是HDFS对应的实例。
获取到该实例后,客户端需要调用该实例的Open方法,获取到这个文件对应的输入流,在HDFS中就是DFSInputStream。
获取到输入流之后,客户端会调用read方法读取数据。输入流会按照排序结果,选择最近的DataNode建立连接,读取数据。
若当前数据块读取完毕,HDFS会关闭与这个DataNode的连接,查找下一个数据块。查找过程还会通过NameNode进行,重复上述过程。
读取结束,调用close方法,关闭输入流DFSInputStream。
以上是关于HDFS的读过程的主要内容,如果未能解决你的问题,请参考以下文章