2

我已经在 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 上安装了 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'}   

在 weblog 表中 -> 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 

请对此提供帮助。因为我用谷歌搜索了很多,但找不到任何对我有帮助的东西。

4

1 回答 1

5

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

HBase 提供实时数据访问是正确的。但是如果你是通过 MR 访问 HBase 就不行了。如果你真的需要 ~ms 访问,你最好编写普通的 Java+HBase API 程序。但是您将无法利用 MR 提供的并行性。因此,您基本上需要在做出任何决定之前好好考虑一下。

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

我想在这里指出一件事。如果您的计划是一次访问不太大的数据,那么您绝对可以将 HBase 与顺序 Java 程序一起使用。但请记住,与顺序访问相比,随机读/写总是带来更大的成本。所以,行动前要好好思考。

于 2013-07-24T09:57:26.670 回答