测试点 2:读写数据流分析
测试环境:Hadoop 2.6.0.2.2.6.0-2800(春哥在桌面云企业版环境中搭建的集群,client
和 datanode 为虚拟机,namenode 和 snamenode 为服务器)。Ip 和主机名分别为:client:
172.29.6.17 ( datanode-c1 ) ; 数 据 节 点 :
172.29.6.20(datanode1)、172.29.6.19(datanode2)、172.29.6.18(datanode3);名称
节点:172.29.6.30(master);第二名称节点:172.29.6.31(snamenode)。
首先介绍一下 hdfs 的写原理:在上传文件时,client 会将文件分成多个 block。针对每
一 个 block , namenode 会 根 据 当 前 集 群 中 各 个 datanode 的 使 用 情 况 返 回 三 个 可 用
datanode(默认副本数是三)给 client(三个 datanode 按照 namenode 指定的顺序排列好
形 成一个数据管 道) , 然 后 client 依 次 将每 个 block 传给 对 应的 数 据 管 道 中的 三 个
datanode(先传给一号 datanode,然后一号再传给二号,二号再传给三号)。最后,每当
一个 block 传递完毕后,所有 datanode 都会向 namenode 报告当前 block 传递完毕,并且
一号 datanode 会向 client 报告 block 传递完毕。另外,namenode 在指定 datanode 时会去
调用机架感知的脚本,进而返回给 client 一个最为合理的 datanode 组合,具体方法是,如
果 client 是 datanode,则把它自己作为第一个 datanode;如果 client 不在当前集群中则随
机选择第一个;第二个和第三个 datanode 则选择不同机架上的两台 datanode(跨机架原
则);其余的 datanode 随机选择。
接下来我们在测试环境中进行上传文件的操作,并考察底层的数据流量,从而验证
hdfs 的写原理。
1. 我们首先创建一个测试文件夹/test-hzw 用来存放上传的测试文件。然后我们通过
client 向/test-hzw 这个目录上传一个本地文件 iperf-2.0.2.tar.gz(大小为 229K)。命令如
下:hadoop fs -put /home/iperf-2.0.2.tar.gz /test-hzw。
2. 在文件上传的过程中我们利用桌面云的端口镜像功能监测流入与流出 client 以及
datanode 虚拟网卡上的网络流量。
我们通过抓包的方式可以分析上传文件时底层数据流的动向。
首先我们站在 client(172.29.6.17)的角度来分析:
刚开始时,client 并不知道文件要往哪里写,它需要和 namenode 通信,从 namenode
那里得知应该将数据传给哪三个 datanode(副本数默认是三)。Client 与 namenode 的通信
是通过 RPC 协议进行的,那么首先需要建立 TCP 连接,下图就是三次握手的数据包:
成功建立连接之后,client 需要和 namenode 沟通一些事情,比如是哪个用户要传文件,
传什么样的文件,传到哪个目录下等等。这些信息在下面的几幅截图中有所反映:
上图表示 client 和 namenode 需要通过 rpc 协议来沟通交流。
评论0