最近有一个优化HDFS读取访问的需求,需要根据访问者的位置计算得到最佳的datanode返回给client,工作中,搜索了各种文章和材料,但是几乎没有太深入的,对我这个初学者来说,信息量不大够,所以就自己动手深入的看了一下源码,对相关的机制进行了一定的探索。根据自己的体会写一点心得,文中部分术语不够准确的希望能够留言予以指正。
-
HDFS文件访问的机制
无论那种情形(CLI、Java、REST...),HDFS文件系统最终都是通过在节点上的HDFS Client来实现对文件的访问,在逻辑上来讲,是这样的:
client
在实际的物理拓扑中,是这样的:
-
JAVA API client
javaclient -
REST API client
REST
担负着Client角色的是org.apache.hadoop.hdfs.DFSClient这个类,它提供了一系列访问HDFS的接口和工具。
第一幅图是我手动画的,为了熟悉ubuntu下的dia绘图工具,加上删选和操作关联比较紧密的类,前后花了将近4个小时。。。第二幅图是用eclipse的插件Objectaid辅助生成的,手动调整了个别的函数调用,虽然这厮功能强大,但是也有不够完善的地方,不过瑕不掩瑜,毕竟比dia方便很多。 -
Java API 方式文件读取时序图一(Using dia):
-
Java API 方式文件读取时序图二(Using Objecaid for eclipse):
-
webHDFS Client get操作时序图(Using Objecaid for eclipse):
待续
网友评论