HBase 笔记 -- 1

来源:互联网 时间:1970-01-01


HBase 笔记 -- 1


传统的信息系统和WEB应用大多采用LAMP架构构建,并使用关系型数据库存储、组织和管理结构化或半结构化数据。通用的关系型数据库无法很好的应对规模剧增时导致的系统扩展性和性能问题。因此,业界出现了一类面向半结构化数据存储和处理的高扩展、低写入/查询延迟的系统,例如,键值存储系统、文档存储系统和类BigTable存储系统等,这些特性各异的系统也统称为NoASQL系统。


HBase作为关系型数据库的有益补充,已经成为应用与互联网服务领域和传统行业的总舵在线式数据分析处理系统中。


Hush: HBase URL Shortener 的简写。Hush可以用来精简URL长度。通过维护一张信息表来实现。

例如:http://maps.google.com/maps?***********+******     映射到短路径:http://hush,li/1688

显然,这个URL更短,更有利于复制到电子邮件,或通过限制字符的媒体(如微博,Twitter和SMS)发送。


Hush没有华丽的UI,只有朴实的的功能,Hush在经过负载均衡后达到数千的TPS请求完全没有困难。有关Hush的完整代码可以从Git库中下载并独立运行、调整和学习有关它的一切。


对于海量数据的重要性,Ralph Kimball博士指出:

“数据资产会取代20世纪传统有形资产的地位,成为资产负债表的重要组成部门”

“数据的价值已经超越了传统企业广泛认同的价值边界”


列式存储的出现主要基于这样一种假设:对于特定的查询,不是所有的值都是必须的。尤其是在分析型数据库里,这种情形很常见,因此需要选择一种更为合适的存储模式。


从典型的RDBMS的角度来看,HBase并不是一个列式存储的数据库,但是它利用了磁盘上的列存储格式,这也是RDBMS与HBase最大的相似之处,因为HBase以列式存储的格式在磁盘上存储数据。但它与传统的列式数据库有很大的不同:传统的列式数据库比较适合实时存取数据的场景,HBase比较适合键值对的数据存取,或者有序的数据存取。


Facebook每天的增量存储到Hadoop集群的数据量超过15TB,并且随后会对所有这些数据进行处理。Facebook每一步操作都会被记录并保存,这非常适合以批处理的模式,为预测和推荐系统构建机器学习模型。


非关系型数据库系统 Not-Only-SQL  简称 NoSQL


Hbase中扩展和负载均衡的基本单元称为region,region本质上是以行键排序的连续存储的区间。如果region太大,系统会把它们动态拆分,相反的,就把多个region合并,以减少存储文件数量。


每个region只能由一台region服务器region server 加载,每一台region服务可以同时加载多个region。


按照Hbase和现在的硬件能力,每台服务器的最佳加载数量差不多是10~1000,每个region的最佳大小是1GB~2GB。每台服务器能加载的region数量和每个region的最佳存储大小取决于单台服务器的有效处理能力。


region拆分和服务相当于其他系统提供的自动分区atuosharding。当一个服务器出现故障后,该服务器上的region可以快速恢复,并获得细粒度的负载均衡,因为当服务于某个region的服务器当前负载过大、发生错误或者被停止使用导致不可用时,系统会将该region移到其他服务器上。


region拆分的操作也非常快--接近瞬间,因为拆分之后的region读取的仍然是原存储文件,直到合并把存储文件异步地写成独立的文件。


数据存储在存储文件store file中,称为HFile,HFile中存储的是经过排序的键值映射结构。当把HFile打开并加载到内存中时,索引信息会优先加载到内存中,每个块的默认大小是64Kb,可以根据需要配置不同的块大小。


每个HFile都有一个块索引,通过一个磁盘查找就可以实现查询。首先,在内存的块索引中进行二分查找,确定可能包含给定键的块,然后读取磁盘块找到实际要找的键。

存储文件通常保存在HDFS中。


每次更新数据时,都会首先将数据记录在提交日志commit log中,在HBase中这叫做预写日志write-ahead log,然后才会将这些数据写入内存中的memstore中。一旦内存保存的写入数据累计大小超过了一个给定的最大值,系统就会将这些数据移除内存作为HFile文件刷写到磁盘中。数据移除内存之后,系统会丢弃对应的提交日志,只保留未持久化到磁盘中的提交日志。在系统将数据移除memstore写入磁盘的过程中,可以不必阻塞系统的读写,通过滚动内存中的memstore就能达到这个目的,即用空的新memstore获取更新数据,将满的旧memstore转换成一个文件。请注意,memstore中的数据已经按照行键排序,持久化到磁盘的HFile也是按照这个顺序排列的,所以不必执行排序或其他特殊处理。


HBase中有3个主要组件:客户端库、一台主服务器、多台region服务器。可以动态地增加和移除服务器,以适应不断变化的负载。主服务器主要负责利用Apache ZooKeeper为region服务器分配region,ZooKeeper是一个可靠的、高可用的、持久化的分布式协调系统。


HBase利用ZooKeeper确保只有一个主服务器在运行,存储用于发现region的引导位置,作为一个region服务器的注册表,以及实现其他的目的。ZooKeeper是一个关键组成部分,没有它HBase就无法运。ZooKeeper使用分布式的一系列服务器和Zab协议(确保其状态一致)减轻了应用上的负担。




相关阅读:
Top