我是HBase的初学者。我目前不确定是什么影响HBase的性能。首先,我以独立模式运行Hbase。我用一台机器运行了一个Mapreduce程序来处理200万条文本行,并将结果输出到存储在本地文件系统中的HBase表中。耗时约1小时40分钟。然后我改为伪分布式模式。Htable文件然后存储在HDFS中。包括程序在内的所有其他内容都保持不变。然后花了3个多小时!!我完全糊涂了。有人能告诉我为什么会发生这种事吗?
另一个问题是,由于我在一台功能不太强大的Linux机器上创建了5个虚拟机作为虚拟集群(8G ram。3GHz 4核CPU)。一个月前,当我运行Mapreduce程序时,当我在一个主机上运行它或在5个以上的从机上运行它时,我没有看到太大的区别。所以我认为CPU可能是瓶颈,但我仍然不确定。由于我对操作系统不太熟悉,有人能肯定地给出答案吗?我不确定是IO瓶颈还是CPU瓶颈。我只是在6台机器集群上运行程序,以便在完全分布式模式下将记录插入HBase表。太慢了,所以我放弃了这份工作。
对于问题的第一部分:
很明显,伪分布式模式将比独立模式运行得慢在单机版中,HBase使用本地文件系统进行存储。在伪分布式模式下,HBase使用HDFS(反过来使用本地文件系统),因此您有一个额外的IO软件层。此外,在伪分布式方式下,您可能在同一台机器中有多个服务器线程,执行复制等操作(每个数据都复制几次),而这在独立模式下是不会发生的。
一般来说,对于较小(足够)的数据,事情越集中(如独立),性能就越好。但是分布式模式对于大规模来说很重要,因为总有一天你会达到单机的可扩展性极限。然后,在分布式模式中,我们需要处理诸如复制之类的事情,这些事情最终会降低总体性能。
关于问题的第二部分,你不应该期望在这些环境中有良好的表现。您必须考虑有许多软件层:HBase、HDFS、Java、虚拟机。每一层都会增加开销。对于分布式从属服务器,由于所有服务器共享相同的硬件,因此速度会更慢。
如果您希望看到一些性能提高,可以考虑在Linux操作系统中使用独立模式,而不是作为虚拟机。然后在真正的集群中使用真正的分布式模式(不在虚拟机中)(如果可以的话,但即使是几台联网的消费者计算机也可以)。你应该期望大约每秒1K~3K推杆。