
HBase 虽然基于 Bigtable 的开源实现,但它们之间还是有很多差别的,Bigtable 经常被描述成键值数据库,而 HBase 则是面向列存储的分布式数据库。
下面介绍 HBase 具备的显著特性,这些特性让 HBase 成为当前和未来最实用的数据库之一。
容量巨大
HBase 的单表可以有百亿行、百万列,可以在横向和纵向两个维度插入数据,具有很大的d性。
当关系型数据库的单个表的记录在亿级时,查询和写入的性能都会呈现指数级下降,这种庞大的数据量对传统数据库来说是一种灾难,而 HBase 在限定某个列的情况下对于单表存储百亿甚至更多的数据都没有性能问题。
HBase 采用 LSM 树作为内部数据存储结构,这种结构会周期性地将较小文件合并成大文件,以减少对磁盘的访问。
扩展性强
HBase 工作在 HDFS 之上,理所当然地支持分布式表,也继承了 HDFS 的可扩展性。HBase 的扩展是横向的,横向扩展是指在扩展时不需要提升服务器本身的性能,只需添加服务器到现有集群即可。
HBase 表根据 Region 大小进行分区,分别存在集群中不同的节点上,当添加新的节点时,集群就重新调整,在新的节点启动 HBase 服务器,动态地实现扩展。这里需要指出,HBase 的扩展是热扩展,即在不停止现有服务的前提下,可以随时添加或者减少节点。
高可靠性
HBase 运行在 HDFS 上,HDFS 的多副本存储可以让它在岀现故障时自动恢复,同时 HBase 内部也提供 WAL 和 Replication 机制。
WAL(Write-Ahead-Log)预写日志是在 HBase 服务器处理数据插入和删除的过程中用来记录 *** 作内容的日志,保证了数据写入时不会因集群异常而导致写入数据的丢失;而 Replication 机制是基于日志 *** 作来做数据同步的。
1、首先你有没有那么多台服务器的集群,如果只是几台,你要想够不够,你的hbase 有几百亿,那么你hdfs上的数据可能要有两个备份,你这几百亿条是如何生成的,肯定是mapreduce跑出来导入到hbase中把,那么原始数据你要不要留,如果留,加上备份就要三份,所以节点的多少要确定。2、几百亿其实挺多的,hbase 的设计一定要跟你的业务相关,hbase他不能完全像关系型数据库那样去随意查询,到达一定量级,如果设计的不好也是非常之慢的,甚至将hbase搞到崩溃。所以你先去网上看看rowkey的设计原则,比如长度原则等等,然后根据自己业务,哪些查询经常用到,哪些不会用到,想要用hbase实现那种非常灵活的类似关系数据库的查询是不理智的。
3、楼上的兄弟说得对,还有region热点的问题,如果你的hbase数据不是那种每天增量的数据,建议跑个mapreduce对你的数据进行各评判,看看如何能将数据尽可能均匀的分配到每个region中,当然这需要预先分配region
4、几百亿条数据,如果对rowkey进行模糊过滤一定非常非常之慢,所以可以考虑二级索引或者协处理器
使用sqoop工具。1、在行键选择那里,通过用“”,将需要做行键的多个列写在一起就可以了。
2、例如要将a和b列同时做行键,那么--hbase-row-key "a,b"就可以了。
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)