分布式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/
real 0m42.693s
user 0m12.163s
sys 0m3.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
real 0m29.178s
user 0m22.577s
sys 0m3.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 ./
real 0m16.727s
user 0m8.550s
sys 0m3.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/
real 0m21.534s
user 0m8.471s
sys 0m3.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上传上述的文件,用时分别为:
200 |
2m6.369s |
201 |
1m47.316s |
202 |
2m18.009s |
203 |
2m15.086s |
204 |
1m48.399s |
205 |
1m35.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参数)。
分享到:
相关推荐
内容概要: 架构、流程、机制、原理、环境、数据...HadoopHDFS-JavaRPC操作代码,含服务端和客户端代码; hadoop生态现状、介绍、部署; hadoop2.4.1伪分布式搭建; 分布式文件系统; 复安装过程详细步骤; hdfs笔记;
hadoop 学习笔记,从搭建环境开始到具体实验。包括hdfs配置,yarn配置,分布式配置,如何编写mapreuduce 一步一步手把手,最后项目是hadoop 与 javaweb
压缩文件中包含了Hadoop生态系统、体系架构及特点,三大基本组件HDFS,MapReduce,YARN的学习笔记,文件为Markdown格式,进行了详细功能介绍说明,可以帮助大家学习hadoop的三大组件或者作为一份详细资料备份,帮助...
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar *** 输入文件目录 输出文件目录 *** 本地运行案例 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar ...
我学习hadoop的笔记,并在公司做的报告,给大家共享下
学习时候的笔记 还有简单例子代码 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
Hadoop、Spark、机器学习、Java、Python、单元测试、清洁代码、Py 项目管理等主题, 关注我,,,, 获取 HDFS 文件大小 $ hdfs dfs -du -s -h hdfs://hadoop-cluster/user/hive/warehouse/hive_schema.db/table 655...
hadoop的hdfs模块学习,所有的操作步骤都是验证过了,都是可执行的
HDFS学习笔记,
Hadoop架构分析之集群结构分析,Hadoop架构分析之HDFS架构分析,Hadoop架构分析之NN和DN原生文档解读,Hadoop MapReduce原理之流程图.Hadoop MapReduce原理之核心类Job和ResourceManager解读.Hadoop MapReduce原理之...
Windows10下搭建eclipse开发hadoop的开发环境 其中的第一至四步骤。 1.2、请参考文章: maven的安装、路径配置、修改库文件路径和eclipse中的配置,解决Eclipse使用Maven下载慢的问题 1.3、创建一个maven工程HDFS ...
Hadoop学习笔记(一):HDFS分布式文件系统(从环境搭建到Java API)-附件资源
包含详细的hadoop搭建和环境笔记 有linux 有hdfs yarn service
hadoop学习资料下载.包括hdfs,集群,MapReduce,HBase,Hive等等.完全收录.
我的 Hadoop 学习阶段仍在继续。 在这个阶段,我发现非常缺乏一个全面的 POC,它至少涵盖了一些突出的 Hadoop 技术。 我的 POC 可以填补这个空白。 在我的笔记本电脑上设置 CDH4.7 后,我完成了这个 POC 的实现,...