本节向大家介绍一下测试Hbase和Hadoop操作文件的性能的方法,主要有六个方面的内容,希望通过本节简单的介绍大家能够掌握测试Hbase和Hadoop操作文件的性能的方法,下面就让我们一起来学习吧。
测试Hbase和Hadoop操作文件的性能
1:单线程hbase的文件存入
StringparentPath="F:/pic/2003-zhujiajian";
File[]files=getAllFilePath(parentPath);
HBaseConfigurationconfig=newHBaseConfiguration();
HTabletable=newHTable(config,newText("offer"));
longstart=System.currentTimeMillis();
for(Filefile:files){
if(file.isFile()){
byte[]data=getData(file);
createRecore(table,file.getName(),"image_big",data);
}
}
longend=System.currentTimeMillis();
System.out.println("timecost="+(end-start));
108037206bytes,303个fileswritefromlocalwindowstoremotehbase,cost23328or21001milliseconds
2:单线程hadoop的文件存入
Configurationconf=newConfiguration();
FileSystemfs=FileSystem.get(conf);
Pathsrc=newPath("F:/pic/2003-zhujiajian");
Pathdst=newPath("/user/zxf/image");
longstart=System.currentTimeMillis();
fs.copyFromLocalFile(src,dst);
longend=System.currentTimeMillis();
System.out.println("timecost="+(end-start));
108037206bytes,303fileswritefromlocalwindowstoremotehdfs,cost26531or32407milliseconds
3:单线程hbase的文件读取
108037206bytes,303filesreadfromhdfstolocalcost479350milliseconds
4:单线程hadoop的文件读取
108037206bytes,303filesreadfromhdfstolocalcost14188milliseconds
5:深入测试Hbase和Hadoop操作文件性能
取几个文件对比
fileSize(byte)hdfstime(ms)hbasetime(ms)
12341140131314688
708474634359
82535153907
5529616125
6思考
测试Hbase和Hadoop操作文件性能期间发生了一个regionoffline的错误,重启服务也还是报错,后然重新formatnamenode,deletedatanode上数据,重启发现还有datanode没有起来,ssh上去发现java进程死了
浪费了1个多小时,仔细想了一下HTable分散到各个HRegionServer上的各子表,一台datanode挂了,当有数据请求时,连不上,所以报regionoffline错误
为什么hbase读取的performance那么差?我单个读取11m的文件需要14000milliseconds,而hdfs真个文件目录的读取才14188milliseconds
DBMSorHBase-butdousallafavorandjustkeepthepathinthemetadata,看来,hbase不合适存放二进制文件,存放图片这样的application还是hdfs更合适了。
a:重新测试了几遍,包括重启hbase,hdfs,hbase的读取速度还是和原先没大差别
b:删除原有数据,重新写入后,再测试读发现,小文件的读取效率搞了很多
fileSize(byte)1(ms)2(ms)3(ms)
12341140117501110911718
708474625610672
82535787878
55296476247
这样就是说读cache有较大的性能提升,在data数量不是非常大的时候,瓶颈是在读取速度上,100k一下的数据读取效率还是可以的,花费时间基本上和要读取的data的长度成正比
但是之前的效率为什么没有变?难道不能cache从磁盘读取的数据?
然后试着读取了最先放入的一批文件中的几个,现在还是很慢,重复b的操作后效率提升了。原因可能是系统在创建row'sclunmdata的时候打上了cache标志,cache适合clunm系统绑定在一起的,hbase启动的时候会把打了cache标志的colunm数据读到memory中.
所以在我执行altertableofferchangeimage_bigIN_MEMORY之前所创建的数据都没有cache标志,此cache不是像其他的cache,启动的时候不做load,访问后再cache,这样一来,cache的数据愈多必然造成启动速度的加慢。本节关于测试Hbase和Hadoop操作文件的性能介绍完毕,请关注本节其他相关报道。
【编辑推荐】
- Hdoop/Hbase文件配置方法详解
- HadoopHBase实现配置简单的单机环境
- Hadoop集群与Hadoop性能优化
- Hadoop 从Yahoo向Google的技术转折
- 深入剖析Hadoop HBase