HDFS读数据过程
第一步:打开文件。用Fliesystem先申明一个对象,然后生成一个子类DistributedFileSystem,这个时候生成FS的实例对象,其实是分布式文件系统HDFS的实例对象。我们要读取数据,都是要创建一个输入流,输入流类型是FSDataInputStream,这是客户端要编写时创建的。
第二步:获取数据块信息。FSDataInputStream会和名称节点沟通,沟通的原因是为了获取数据块具体保存在哪些数据节点上面去,通过ClientProtocal.getBlockLocations()直接找下一个数据块,名称节点会把包含的文件开始一部分的数据块信息位置信息返回。
第三步:读取请求。客户端获得了输入流FSDataInputStream就可以调用read()开始读数据,名称节点把数据位置返回来,并进行排序,返回客户端。客户端拿到位置信息列表,他在输入流实行read(),会选择最近的数据节点进行连接,然后进行读数据。
第四步:读取数据。数据要从数据节点读到客户端,读完以后FSDataInputStream关闭与这个数据节点的连接。
第五步:获取数据块信息。就是再去让这个输入流通过ClientProtocal.getBlockLocations()询问名称节点下一个数据被存在哪里,名称节点会把信息给返回来。
第六步:读取数据。又是利用read()与其他数据节点连接起来读取数据。数据读取完,关闭和其他数据节点的连接。依次循环往复读取,直到完成所有数据快的读取。
第七步:关闭文件。
标签:HDFS,读取数据,学习心得,读数据,数据,节点,客户端 From: https://www.cnblogs.com/mtyiii/p/16839025.html