我已经使用完全分布式模式的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
请帮忙。我搜索了很多但却找不到任何可以帮助我的东西。
答案 0 :(得分:5)
Hadoop或任何其他批处理系统,如果您有实时需求或需要~ms的性能,则不适合。无论您的h / W有多好以及您的MR工作有多好,当您运行MR工作时总会有一些初始延迟。这是不可避免的。原因是,当您提交MR作业时,在处理实际开始之前会发生很多事情,比如检查输入路径,创建拆分,创建地图任务等等。
HBase提供实时数据访问是正确的。但是如果你通过MR访问HBase,它并不成功。如果您确实需要~ms访问权限,那么最好编写正常的Java + HBase API程序。但是你将无法利用MR提供的并行性。所以,在你做出任何决定之前,你基本上需要好好思考。
如果您有实时需求,Impala和Phoenix等工具可能会有所帮助。但他们有自己的+和 - 。
我想在此指出一件事。如果您的计划是一次访问 not-so-big 数据,那么您肯定可以将HBase与顺序Java程序一起使用。但请记住,与顺序访问相比,随机读/写总是带来更高的成本。所以,在你采取行动之前要好好想想。