wscl1213 发表于 2013-10-25 10:43:19

关于HDFS的IO性能测试

我做了一个简单的测试,配置情况如下:
namenode: n1
datenode: n2~n5
测试程序hadoop-test-0.20.203.0.jar,测试选项TestDFSIO -write -nrFile x -FileSize -y
写操作:
文件数 1      峰值Throughput            102 MB/s
文件数 4      峰值Throughput            52 MB/s
文件数 64      峰值Throughput            5 MB/s
文件数 128      峰值Throughput          5 MB/s
我没搞明白的是,随着写文件数的增加,为何性能下降如此大吗?
有高手能解释一下吗吗?

yaojiank 发表于 2013-10-25 10:43:19

这个你是在一个client写的么吗?是否是你client的限制

nextuser 发表于 2013-10-25 10:43:19

throughput的值貌似是单个instance的平均值(一个instance写一个文件),因为你机器比较少(4台),总的网络/diskio会成为瓶颈(如果是千兆网络,四台机器总共只能提供128M x 4 = 512M带宽),所以多个文件同时写的时候,单个文件的写速度会下降(平摊后)

JavaShoote 发表于 2013-10-25 10:43:19

我想知道你这些测试值是怎么出来的吗?

yaojiank 发表于 2013-10-25 10:43:19

TestDFSIO.jar的文件个数大致上就是Mapper任务个数,再在Mapper中生成字串写入DFS测试,所以字串是本地生成的,应该不是带宽的吧。(我也没细看过,只是觉得)
从MapperNum=4基本就看出了大致的IO性能,每个Mapper基本上是饱和的IO使用率,与MapperNum=1相比,提速近1倍,这其中还需要了解副本的拷贝的具体实现,也可能存在副本占IO带宽不均衡等因素,总之到这里基本解释的通..
至于64、128,完全是因为Mapper中并行了大量的作业造成的,单机大量并行的DFSIO操作被限制住了,而Mapper机制是先构建一个Map作业队列,然后根据各节点剩余Map槽数(由机器性能决定,CPU核之类的吧,可以看出tasktracker配置很高,10核,不是吧吗?可能还与内存等因素有关吧,具体要看Map槽数怎么计算的,总之1个节点是被分了10个Map槽)分配任务,并行作业(即大于40的都会被排Mapper中的队列,所以实质都是4*10个线程在并行跑),显然计算性能会体现的非常显著,而因为在同一台机器上有DFSIO制约,所以每个平均下来只有5m/s的throughput..个人觉得大致就是这样吧...

RnD_Alex 发表于 2013-10-25 10:43:19

这里的Mapper和文件的Block无关,只是把Mapper当成另一个Client往DFS里写数据罢了
页: [1]
查看完整版本: 关于HDFS的IO性能测试