hdfs获取输入流跟踪

来源:互联网 发布:java json双引号转义 编辑:程序博客网 时间:2024/06/05 14:17

测试代码如下:


从上面例子可以看出fs对象open方法获取输入流对象,那么获取输入流对象可以获取什么信息呢?通过跟踪我们可以看出输入流信息非常丰富,比如:namenode信息,block块信息,大小,是否完整,块信息,还有远程通信的代理对象信息等。那么就让我们跟踪了解其原理:

首先fs对象调用open方法,设置缓存大小为4096,相当于磁盘一个簇的大小,(我认为设置这样的大小速度效率应该为佳),返回FSDataInputStream对象,因为此方法为抽象则调用子类方法

子类方法如下图


我们可以进行debugger调试,执行docall方法,调用dfs的open方法(dfsClent),通过调试我们可以获取DFSInputStream创建时会获取相关信息如下:


此时会获取openInfo方法,这个方法就是根据我们设置的一些参数来获取namenode,block等信息


从上述代码追踪可知,当我们open时获取fs操作的很多相关信息。由上面图及解析现在可以知道获取流对象的相关信息及原理了吧,不过最好自己动下手这样更清晰一些。