第一,hbase本来就是k-v类型列式存储的非关系型数据库,基于hadoop的hdfs文件系统是为分布式而设计。因此hbase肯定依赖于hadoop的,不能脱离hadoop而存在。
第二,hbase应用在Phoenix中去做OLTP功能的实现,其实hbase也可以当成类似redis一样数据去用的,单节点其实也没有太大关系,借助于hbase的缓存,响应速度也挺快的,restful api也挺好用的。
那么回到你的问题本质上来,为什么要建hbase集群!根据以上两点,我们知道hbase依存于hadoop的hdfs文件系统。而hadoop是干嘛的,专门为大数据而设计的,大数据当然要大,姑且PB算是门槛吧,这么多数据,哪怕是k-v数据库也吃不消。PB级数据看列的数目,我见过设计好的表,60多列采用parquet存储,可以存储5到6千亿行左右数据。而传统数据库MySQL基本单一节点的话千万级别都需要一个精通B+树,懂行的DBA才能有点路子。MySQL面试咋问的?表行数太多咋办?横向切割呗,按照region(举个例子,每个公司不一样),分布式MySQL分表分库呗,这就解决了。同样的道理,hdfs也是基于B+树实现的分布式文件系统,为了索引查询更快,hbase分布式集群当然也是必然的选择。hbase专门为此设计二级索引。
最关键一点在于,hbase基于hadoop,你不充分利用集群分布式高可用、鲁棒性,你一个节点挂了可咋办?你可是存储大数据的工具,挂了那一会儿,多少数据没了?数据涌来的时候,你要compact,一台节点这个时候只能等文件处理完毕继续工作,因为IO cpu可能时不时就警报一下,一台节点的线程和进程数目有天然限制。集群可以轻松打破这些限制,让查询并行化,更快速度的响应,更加高可用稳定,所以集群是一定要的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3119435/ ,如需转载,请注明出处,否则将追究法律责任。