Hbase用Hadoop映射降低性能的原因是什么?

时间:2013-07-24 07:04:09

标签: hadoop cloud hbase

我已经使用完全分布式模式的3台机器配置了hadoop1.0.3。在作业正在运行的第一台机器上运行:

1) 4316 SecondaryNameNode 4006 NameNode 4159 DataNode 4619 TaskTracker 4425 JobTracker

2) 2794 TaskTracker 2672 DataNode

3) 3338 DataNode 3447 TaskTracker

现在当我运行简单的map reduce作业时,执行map reducejob需要更长的时间。所以我在Hadoop.now上安装了HBASE层我在3个集群上有以下HBASE进程。

1)    5115 HQuorumPeer     5198 HMaster    5408 HRegionServer
2)    3719 HRegionServer    3617 HQuorumPeer
3)    2937 HQuorumPeer    2719 HRegionServer

当我在HBASE上为1,00,000个数据运行map-reduce作业时,它需要1分钟,而对于1,00,00,000个数据则相同。现在我希望结果只需几毫秒。我应该采取哪些措施来改进?

我是新手,所以请帮助我或建议对HBASE或hadoop进行一些分层,这样我就能在几毫秒内得到结果。

我总结了以下记录:

hbase(main):007:0> describe 'weblog'
DESCRIPTION                                                                 ENABLED                                       
 'weblog', {NAME => 'info', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER =>    true
 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '3', COMPRESSION => 'NONE'
 , MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DELETED_CELLS =>
 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', 
  ENCODE_ON_DISK => 'true', BLOCKCACHE => 'true'}   

在博客表格中 - > info:category,info:hits是列。

info:category info:hits

web             2

mail           10

ftp             1

web             3

mail           11

ftp             2

数据将在map reduce中汇总并存储在另一个表中。

hbase(main):004:0> put 'weblog', 'row1', 'info:category', 'web'
0 row(s) in 0.0560 
hbase(main):004:0> put 'weblog', 'row1', 'info:hits', '2'
0 row(s) in 0.0560 

请帮忙。我搜索了很多但却找不到任何可以帮助我的东西。

1 个答案:

答案 0 :(得分:5)

Hadoop或任何其他批处理系统,如果您有实时需求或需要~ms的性能,则不适合。无论您的h / W有多好以及您的MR工作有多好,当您运行MR工作时总会有一些初始延迟。这是不可避免的。原因是,当您提交MR作业时,在处理实际开始之前会发生很多事情,比如检查输入路径,创建拆分,创建地图任务等等。

HBase提供实时数据访问是正确的。但是如果你通过MR访问HBase,它并不成功。如果您确实需要~ms访问权限,那么最好编写正常的Java + HBase API程序。但是你将无法利用MR提供的并行性。所以,在你做出任何决定之前,你基本上需要好好思考。

如果您有实时需求,Impala和Phoenix等工具可能会有所帮助。但他们有自己的+和 - 。

我想在此指出一件事。如果您的计划是一次访问 not-so-big 数据,那么您肯定可以将HBase与顺序Java程序一起使用。但请记住,与顺序访问相比,随机读/写总是带来更高的成本。所以,在你采取行动之前要好好想想。