实验室要做一个hadoop上传文件性能测试,自己用实验室电脑做了个简单的测试
2014-05-11 17:30
417 查看
硬件环境:
实验室的3台老机器组成的集群,配置:
NameNode:
CPU:
Intel(R) Pentium(R) Dual CPU E2160 @ 1.80GHz
size: 1800MHz
capacity: 1800MHz
width: 64 bits
clock: 200MHz
Memory:
size: 2GiB
width: 64 bits
Network:
description: Ethernet interface
product: RTL-8139/8139C/8139C+
endor: Realtek Semiconductor Co., Ltd.
size: 100Mbit/s
capacity: 100Mbit/s
width: 32 bits
clock: 33MHz
DISK:
description: ATA Disk
product: ST3160815AS
vendor: Seagate
size: 149GiB (160GB)
Slave1:
CPU:
product:Intel(R)Core(TM)2DuoCPUE7300@2.66GHz
vendor:IntelCorp.
physicalid:1
businfo:cpu@0
version:6.7.6
size:2650MHz
width:64bits Fedorarelease15(Lovelock)32bit
Memory:
description:SystemMemory
size:2GiB
width:64bits
clock:800MHz(1.2ns)
Network:
description:Ethernetinterface
product:88E8056PCI-EGigabitEthernetController
vendor:MarvellTechnologyGroupLtd.
size:100Mbit/s
capacity:1Gbit/s
width:64bits
clock:33MHz
DIsk:
description:ATADisk
product:HitachiHDP72501
size:149GiB(160GB)
capabilities:partitionedpartitioned:dos
Slave2:
CPU:
description: CPU
product: Intel(R) Core(TM)2 CPU 6300 @ 1.86GHz
vendor: Intel Corp.
slot: Socket 775
size: 1600MHz
capacity: 4GHz
width: 64 bits
clock: 266MHz
MEMORY:
description: System Memory
size: 2GiB
description: DIMM 800 MHz (1.2 ns)
size: 2GiB
width: 64 bits
clock: 800MHz (1.2ns)
Network:
description: Ethernet interface
product: RTL8111/8168B PCI Express Gigabit Ethernet controller
vendor: Realtek Semiconductor Co., Ltd.
size: 100Mbit/s
capacity: 1Gbit/s
width: 64 bits
clock: 33MHz
Disk:
description: ATA Disk
product: Hitachi HDS72103
vendor: Hitachi
size: 298GiB (320GB)
3台机器用5类线接到一台FAST FR516交换机上。
路由器型号:FAST FR516
网络标准:IEEE 802.3,IEEE 802.3u,IEEE 802.3x,IEEE 802.1X
网络协议:TCP/IP,DHCP,ICMP,NAT,PPPoE,SNTP
传输速率:10/100Mbps
端口结构:非模块化
广域网接口:1个
局域网接口:16个
接口介质:10Base-T:3类或3类以上UTP
100Base-TX:5类UTP
软件环境:
3台机器上都装着Fedorarelease15(Lovelock)32bit,hadoop 1.0.0(,集群设置副本数量Replication = 2。集群上启动了map-reduce,HDFS和SSH服务。没有运行任何其它job)
测试过程:
1. 首先将hdfs的上传速度和scp的速度做对比,在集群中找了一个节点Slave1,向hdfs put一个643MB的文件(hdfs文件块64MB,2个节点,每个节点大约会有5个文件块(共11个)):
[hadoop@Slave1 Downloads]$ time hadoop fs -put 2008.zip /usr/hadoop
real 1m6.896s
user 0m7.197s
sys 0m2.256s
用了66.896秒,平均速度为9.6M/s.
2. 再看看下载的速度,将本地的文件删除,从hdfs上get一个:
[hadoop@Slave1 Downloads]$ time hadoop fs -get /usr/hadoop/2008.zip 2008.zip
real 0m19.830s
user 0m5.269s
sys 0m2.311s
下载的速度很快,只用了19.830秒,约32.4MB/s的速度.
3. 从该节点向另外一个节点scp该文件:
[hadoop@Slave1 Downloads]$ scp 2008.zip hadoop@10.103.240.152
2008.zip 100% 643MB 11.1MB/s 00:58
real 1m1.427s
user 0m10.563s
sys 0m2.714s
用了61.427秒,平均速度为10.5M/s.
4. 再看一下Slave1在单点内文件传输效率,
[hadoop@Slave1 Downloads]$ time cp 2008.zip ~
real 0m19.358s
user 0m0.014s
sys 0m1.201s
用了19.358秒,平均速度为33.2MB/s
显然,和Slave1单点下载HDFS文件速度差不多,估计是由于HDFS块本地化的原因。查看2008.zip文件的block分布:
分析:由于副本数为2,且只有Slave1和Slave2两个数据节点,因此在每个节点上都有一份完整的2008.zip文件。这样在单点下载HDFS文件时,总时间相当于本地文件复制加上与HDFS系统交互的所用的时间。
5. 因此我们在NameNode上下载该文件:
[hadoop@Master Downloads]$ time hadoop fs -get /usr/hadoop/2008.zip 2008.zip
real 0m59.757s
user 0m14.479s
sys 0m8.009s
用了59.757秒,平均速度为10.7MB/s.
在NameNode上上传该文件:
[hadoop@Master ~]$ time hadoop fs -put Downloads/2008.zip /usr/hadoop/2008.zip
real 1m13.005s
user 0m10.672s
sys 0m3.932s
用了73.005s,平均速度为8.8MB/s.
6. 之前都是测试的单个文件传输速率,我们来看一下多个小文件的传输速率。
JarsLib文件夹是由31594个小文件组成,总共467M。
我们在Slave1上进行测试。首先向HDFS上传该文件:
[hadoop@Slave1 ~]$ time hadoop fs -put JarsLib/ /usr/hadoop/JarsLib
real 6m18.592s
user 0m26.000s
sys 0m11.101s
用了378.592秒,1.2MB/s.
然后我们从HDFS上下载该文件:
[hadoop@Slave1 ~]$ time hadoop fs -get /usr/hadoop/JarsLib ~
real 1m11.225s
user 0m16.483s
sys 0m6.683s
用了71.225秒,平均6.5MB/s.
从该节点向另外一个节点scp该文件:
[hadoop@Slave1 Downloads]$ time scp -r JarsLib hadoop@10.103.240.152
real 1m1.755s
user 0m8.115s
sys 0m3.579s
用时61.755s,平均速度7.6MB/s
单点内复制速度:
[hadoop@Slave1 ~]$ time cp -r JarsLib/ ~/Downloads/
real 0m15.001s
user 0m0.076s
sys 0m1.631s
用了15.001s,平均速度为31.3MB/s.
然后我们在NameNode上下载该文件:
[hadoop@Master ~]$ time hadoop fs -get /usr/hadoop/JarsLib ~
real 1m31.138s
user 0m32.430s
sys 0m15.251s
用时91.138s,平均速度5.1MB/s.
在NameNode上上传该文件。
[hadoop@Master ~]$ time hadoop fs -put JarsLib/ /usr/hadoop/JarsLib
real 7m4.508s
user 0m44.582s
sys 0m16.922s
用了424.450s,p平均速度为1.1MB/s.
小结:
分析1和6,文件个数对文件传输效率的影响是十分巨大地,不管是在DataNodes内或DataNodes外,对于本实验的两个文件来说,文件上传效率相差8倍左右。
分析3和4,由于数据的本地化,Slave1上保存了文件的所有数据,因此对于少量大文件来说,传输速率和本地磁盘复制的速率相差不大。而随着大量小文件的增加,本地磁盘速率影响较小,而HDFS传输的速率搜到较大影响。本例中相差4倍多。
分析5和6,datanodes以外的节点上传文件为单点输出,而相对于从HDFS上下载数据的多对单传输比较,速度相差较大,5倍左右。
总的来说,单节点之间传输的最大速率为10MB/s,考虑到网卡为100M网卡(理论最大速率为12.5MB/s),交换机亦为100M接口,网线为5类线,猜测限制因素主要为PC和交换机网卡。
从表中可以分析出更多的数据,在这里就不一一列举。
实验室的3台老机器组成的集群,配置:
NameNode:
CPU:
Intel(R) Pentium(R) Dual CPU E2160 @ 1.80GHz
size: 1800MHz
capacity: 1800MHz
width: 64 bits
clock: 200MHz
Memory:
size: 2GiB
width: 64 bits
Network:
description: Ethernet interface
product: RTL-8139/8139C/8139C+
endor: Realtek Semiconductor Co., Ltd.
size: 100Mbit/s
capacity: 100Mbit/s
width: 32 bits
clock: 33MHz
DISK:
description: ATA Disk
product: ST3160815AS
vendor: Seagate
size: 149GiB (160GB)
Slave1:
CPU:
product:Intel(R)Core(TM)2DuoCPUE7300@2.66GHz
vendor:IntelCorp.
physicalid:1
businfo:cpu@0
version:6.7.6
size:2650MHz
width:64bits Fedorarelease15(Lovelock)32bit
Memory:
description:SystemMemory
size:2GiB
width:64bits
clock:800MHz(1.2ns)
Network:
description:Ethernetinterface
product:88E8056PCI-EGigabitEthernetController
vendor:MarvellTechnologyGroupLtd.
size:100Mbit/s
capacity:1Gbit/s
width:64bits
clock:33MHz
DIsk:
description:ATADisk
product:HitachiHDP72501
size:149GiB(160GB)
capabilities:partitionedpartitioned:dos
Slave2:
CPU:
description: CPU
product: Intel(R) Core(TM)2 CPU 6300 @ 1.86GHz
vendor: Intel Corp.
slot: Socket 775
size: 1600MHz
capacity: 4GHz
width: 64 bits
clock: 266MHz
MEMORY:
description: System Memory
size: 2GiB
description: DIMM 800 MHz (1.2 ns)
size: 2GiB
width: 64 bits
clock: 800MHz (1.2ns)
Network:
description: Ethernet interface
product: RTL8111/8168B PCI Express Gigabit Ethernet controller
vendor: Realtek Semiconductor Co., Ltd.
size: 100Mbit/s
capacity: 1Gbit/s
width: 64 bits
clock: 33MHz
Disk:
description: ATA Disk
product: Hitachi HDS72103
vendor: Hitachi
size: 298GiB (320GB)
3台机器用5类线接到一台FAST FR516交换机上。
路由器型号:FAST FR516
网络标准:IEEE 802.3,IEEE 802.3u,IEEE 802.3x,IEEE 802.1X
网络协议:TCP/IP,DHCP,ICMP,NAT,PPPoE,SNTP
传输速率:10/100Mbps
端口结构:非模块化
广域网接口:1个
局域网接口:16个
接口介质:10Base-T:3类或3类以上UTP
100Base-TX:5类UTP
软件环境:
3台机器上都装着Fedorarelease15(Lovelock)32bit,hadoop 1.0.0(,集群设置副本数量Replication = 2。集群上启动了map-reduce,HDFS和SSH服务。没有运行任何其它job)
测试过程:
1. 首先将hdfs的上传速度和scp的速度做对比,在集群中找了一个节点Slave1,向hdfs put一个643MB的文件(hdfs文件块64MB,2个节点,每个节点大约会有5个文件块(共11个)):
[hadoop@Slave1 Downloads]$ time hadoop fs -put 2008.zip /usr/hadoop
real 1m6.896s
user 0m7.197s
sys 0m2.256s
用了66.896秒,平均速度为9.6M/s.
2. 再看看下载的速度,将本地的文件删除,从hdfs上get一个:
[hadoop@Slave1 Downloads]$ time hadoop fs -get /usr/hadoop/2008.zip 2008.zip
real 0m19.830s
user 0m5.269s
sys 0m2.311s
下载的速度很快,只用了19.830秒,约32.4MB/s的速度.
3. 从该节点向另外一个节点scp该文件:
[hadoop@Slave1 Downloads]$ scp 2008.zip hadoop@10.103.240.152
2008.zip 100% 643MB 11.1MB/s 00:58
real 1m1.427s
user 0m10.563s
sys 0m2.714s
用了61.427秒,平均速度为10.5M/s.
4. 再看一下Slave1在单点内文件传输效率,
[hadoop@Slave1 Downloads]$ time cp 2008.zip ~
real 0m19.358s
user 0m0.014s
sys 0m1.201s
用了19.358秒,平均速度为33.2MB/s
显然,和Slave1单点下载HDFS文件速度差不多,估计是由于HDFS块本地化的原因。查看2008.zip文件的block分布:
分析:由于副本数为2,且只有Slave1和Slave2两个数据节点,因此在每个节点上都有一份完整的2008.zip文件。这样在单点下载HDFS文件时,总时间相当于本地文件复制加上与HDFS系统交互的所用的时间。
5. 因此我们在NameNode上下载该文件:
[hadoop@Master Downloads]$ time hadoop fs -get /usr/hadoop/2008.zip 2008.zip
real 0m59.757s
user 0m14.479s
sys 0m8.009s
用了59.757秒,平均速度为10.7MB/s.
在NameNode上上传该文件:
[hadoop@Master ~]$ time hadoop fs -put Downloads/2008.zip /usr/hadoop/2008.zip
real 1m13.005s
user 0m10.672s
sys 0m3.932s
用了73.005s,平均速度为8.8MB/s.
6. 之前都是测试的单个文件传输速率,我们来看一下多个小文件的传输速率。
JarsLib文件夹是由31594个小文件组成,总共467M。
我们在Slave1上进行测试。首先向HDFS上传该文件:
[hadoop@Slave1 ~]$ time hadoop fs -put JarsLib/ /usr/hadoop/JarsLib
real 6m18.592s
user 0m26.000s
sys 0m11.101s
用了378.592秒,1.2MB/s.
然后我们从HDFS上下载该文件:
[hadoop@Slave1 ~]$ time hadoop fs -get /usr/hadoop/JarsLib ~
real 1m11.225s
user 0m16.483s
sys 0m6.683s
用了71.225秒,平均6.5MB/s.
从该节点向另外一个节点scp该文件:
[hadoop@Slave1 Downloads]$ time scp -r JarsLib hadoop@10.103.240.152
real 1m1.755s
user 0m8.115s
sys 0m3.579s
用时61.755s,平均速度7.6MB/s
单点内复制速度:
[hadoop@Slave1 ~]$ time cp -r JarsLib/ ~/Downloads/
real 0m15.001s
user 0m0.076s
sys 0m1.631s
用了15.001s,平均速度为31.3MB/s.
然后我们在NameNode上下载该文件:
[hadoop@Master ~]$ time hadoop fs -get /usr/hadoop/JarsLib ~
real 1m31.138s
user 0m32.430s
sys 0m15.251s
用时91.138s,平均速度5.1MB/s.
在NameNode上上传该文件。
[hadoop@Master ~]$ time hadoop fs -put JarsLib/ /usr/hadoop/JarsLib
real 7m4.508s
user 0m44.582s
sys 0m16.922s
用了424.450s,p平均速度为1.1MB/s.
小结:
编号 | 传输方向 | 643MB(1个文件) | 467M(34594个文件) | ||
传输时间 | 传输速率 | 传输时间 | 传输速率 | ||
1 | Slave1-> HDFS | 66.896s | 9.6MB/s | 378.592s | 1.2MB/s |
2 | Slave1-> Slave2 | 61.427s | 10.5MB/s | 71.225s | 6.5MB/s |
3 | HDFS->Slave1 | 19.830s | 32.4MB/s | 61.755s | 7.6MB/s |
4 | Slave1-> Slave1 | 19.358s | 33.2MB/s | 15.001s | 31.3MB/s |
5 | HDFS->NameNode | 59.757s | 10.7MB/s | 91.138s | 5.1MB/s |
6 | NameNode->HDFS | 73.005s | 8.8MB/s | 424.450s | 1.1MB/s |
分析3和4,由于数据的本地化,Slave1上保存了文件的所有数据,因此对于少量大文件来说,传输速率和本地磁盘复制的速率相差不大。而随着大量小文件的增加,本地磁盘速率影响较小,而HDFS传输的速率搜到较大影响。本例中相差4倍多。
分析5和6,datanodes以外的节点上传文件为单点输出,而相对于从HDFS上下载数据的多对单传输比较,速度相差较大,5倍左右。
总的来说,单节点之间传输的最大速率为10MB/s,考虑到网卡为100M网卡(理论最大速率为12.5MB/s),交换机亦为100M接口,网线为5类线,猜测限制因素主要为PC和交换机网卡。
从表中可以分析出更多的数据,在这里就不一一列举。
相关文章推荐
- eclipse中配置tomcat7
- 开始linux下的编程之旅,原厂SDK&openWRT编译之MTK方案
- Opencv学习笔记之:(1)Opencv简介
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- linux之LVM详解
- unix/linux 探讨系统调用write的原子性(atomic)
- When to use Class.isInstance() & when to use instanceof operator?
- Linux 2.6 menuconfig内核编译配置选项详解
- tomcat结合nginx或apache实现负载均衡
- linux下的基本命令
- python-setuptools is needed by impala-shell-1.2.3-1.p0.352.el6.x86_64
- Linux系统怎么查看CPU是否支持虚拟化
- openSession和getCurrentSession的比较
- Git 概述
- Linux getcwd()的实现
- error: insufficient permissions for device(解决adb shell问题)
- opencv的assert函数
- 更改 centos yum 源
- 基于linux 的2048
- 基于linux 的2048