设为首页 收藏本站
查看: 490|回复: 0

[经验分享] hadoop学习笔记(10)-HDFS I/O性能测试

[复制链接]
发表于 2016-12-11 09:33:27 | 显示全部楼层 |阅读模式
  分布式RDF查询引擎的项目需要在节点之间传输中间结果,考虑HDFS可以作为一个备选的传输媒介,于是对HDFS的IO性能做了一个粗略的测试,过程和结果如下:
  [转载引用请注明出处:http://blog.csdn.net/bhq2010/article/details/8740154]

硬件环境:
  实验室的8台老机器组成的集群,配置:
  Intel 965芯片组
  Intel Core E4400 CPU(2GHz双核,2MB L2,800MHz FSB)
  1GB*4 双通道 DDR2 667 内存
  160GB*1 SATA2 硬盘
  集成BCM5754 GigabitPCI-E 网卡
  8台机器用1米长的5类线接到一台48G背板带宽的24口千兆交换机上

软件环境:
  8台机器上都装着
  centos 6.2(2.6.32) x64 系统
  hadoop 1.0.4(集群上启动了map-reduce,还运行着zookeeper和hama0.6.0,但没有运行任何job)

测试过程:
  由于只是想知道hdfs大概的io性能,以下的实验都没有多次实验取平均。
  首先将hdfs的上传速度和scp的速度做对比,随便在集群中找了一个节点iir455-202,向hdfs put一个1028MB的文件(hdfs文件块64MB,8个节点,每个节点大约会有2个文件块):

[iir@iir455-202 data]$ time ~/hadoop-1.0.4/bin/hadoop fs -put external_links_en.nt /bhq/
real0m42.693s
user0m12.163s
sys0m3.138s
  用了42.693秒,从该节点向另外一个节点scp该文件:

[iir@iir455-202 data]$ time scp external_links_en.nt iir@iir455-200:/data/
external_links_en.nt                          100% 1028MB  36.7MB/s   00:28   
real0m29.178s
user0m22.577s
sys0m3.406s
  用了29.178秒,可见hdfs put文件的速度约24MB/s,scp点对点拷贝的速度约35MB/s。
  再看看下载的速度,将本地的文件删除,从hdfs上get一个:

[iir@iir455-202 data]$ time ~/hadoop-1.0.4/bin/hadoop fs -get /bhq/external_links_en.nt ./
real0m16.727s
user0m8.550s
sys0m3.693s

  下载的速度很快,只用了16.727秒,约61.5MB/s的速度,怀疑是本地有缓存导致速度很快,于是换个目录试试:

[iir@iir455-202 data]$ mkdir 123
[iir@iir455-202 data]$ time ~/hadoop-1.0.4/bin/hadoop fs -get /bhq/external_links_en.nt ./123/
real0m21.534s
user0m8.471s
sys0m3.737s

  21.534秒,速度依然挺快的,应该和本地的缓存没啥关系,50-60MB/s的这个速度估计也就接近了老SATA2硬盘、集成网卡和5类网线的极限了。
  上面用的是hadoop的命令,下面用程序测试一下,测试程序如下:

public static void main(String[] args) throws IOException
{
long b = System.currentTimeMillis();
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
OutputStream out = fs.create(new Path("/test/external_links_en.nt"));
InputStream in = new BufferedInputStream(new FileInputStream("/data/external_links_en.nt"), 1024*1024*10);
IOUtils.copyBytes(in, out, conf);
in.close();
out.close();
System.out.println("upload time:" + (System.currentTimeMillis() - b));
b = System.currentTimeMillis();
in = fs.open(new Path("/test/external_links_en.nt"));
out = new FileOutputStream("/data/download/external_links_en.nt");
IOUtils.copyBytes(in, out, conf);
in.close();
out.close();
System.out.println("download time:" + (System.currentTimeMillis() - b));
}


在202节点上运行,结果如下:
[iir@iir455-202 data]$ ~/hadoop-1.0.4/bin/hadoop jar hdfstest.jar
upload time:46966
download time:17633


上传用了46.996秒,约22MB/s,下载用了17.663秒,约58MB/s。换一个203节点下载(注掉了上传的代码)试试:

[iir@iir455-203 data]$ ~/hadoop-1.0.4/bin/hadoop jar hdfstest.jar
download time:24204

  用了24.204秒,约42MB/s
  上面都是单点上传的,试试集群中多个节点一起上传文件:
  从200-205这六个节点同时向hdfs上传上述的文件,用时分别为:
  


2002m6.369s
2011m47.316s
2022m18.009s
2032m15.086s
2041m48.399s
2051m35.219s
  平均每个节点用时118秒。

小结:
  hadoop1.0.4所带的hdfs的单点下载要比上传快大约1倍。假如通过hdfs实现集群中两个结点之间的文件传输(一个节点上传,另一个节点下载),从上面1GB文件测试结果看,用时大约在1分钟左右,而scp用时半分钟左右,scp快了一倍,如果用socket,速度应该会更快。
  所以如果只是点对点传文件,不要用hdfs!
  而如果是需要多对一传文件的话,以上述的测试为例,上传用了118秒(其实第一个文件上传完了,接收端就可以读取了,无须等待所有的文件都传完,不过上传也会对下载有一些影响,所以用平均值来作为上传时间)、下载大约120秒(按50MB/s的速度算),而如果用scp的话,多对一的速度和一对一的速度基本是一样的(因为接收方的网速限制了速度),那么用时将达到180s,可见scp的速度还是快,但是仅快了30%左右。
  也许发送节点越多,这个差距会越小,甚至hdfs会比scp还要快,但是理论上是不会比socket快的。
  结论就是,hdfs传输中间结果也许可以在一些特殊场合下用。但更通用的是直接的网络传输,并且在传输时使用适当的压缩(如scp的-C参数)。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312620-1-1.html 上篇帖子: Hadoop安全云盘开发(第1篇) 下篇帖子: hadoop mapreduce 中java用gson类库解析json
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表