关于HDFS数据传输的问题

HDFS通信有client和NameNode以及DataNode两部分。NameNode获取元数据,定位到具体DataNode,然后去DataNode读取相应的文件数据。与其去解包分析,不如修改源码直接打印通信细节来的经济实惠。
■网友
HDFS client读取集群数据过程比较复杂,涉及到client与namenode及datanode之间的通讯。与其tcpdump抓包分析,不如看一下架构文档。Hadoop分布式文件系统:架构和设计
■网友
1. 可以2. 可以1的前提是你的集群并没有in secure mode。意思是集群http通讯没有加一层ssl; rpc之间没有使用encryption算法; node之间没有用sasl协议或者不是用privilege模式启动的。大多数情况下,普通玩家,学习者,肯定是没开secure mode的。不过协议的格式很复杂,看过源码就知道了。
■网友
数据由socket流传输的,应该能抓到,不过要分析可能有点麻烦。发过来的数据是以包为单位的,一个包最多64KB或4KB(还是16KB来着?),包格式固定,主要包括包头(包长,该包在数据块偏移量等)、校验数据(512个字节原数据产生4字节校验数据)和实际数据等。也就是说发过来的包不仅仅是你想要的数据,所以你还是得知道包帧格式,不过就算你知道了包格式,找到了一个包的数据部分,也不是那么好分析,你难道要自己校验?有可能某个多字节字符刚好分布在上一个包的结束和这个包的开头呢,socket流发送是二进制形式的。
■网友
我猜应该是是加密通讯,TLS/SSL,所以你抓不到的应该。。。不过不确定啊


    推荐阅读