广州做大型网站建设,网页编辑器哪个好,3322网建站,ppt在线预览wordpress要实现操作hbase数据表首先要了解它的原理#xff1a;
1,Hbase原理篇
HBASE就是基于Hadoop的一个开源项目#xff0c;也是对Google的BigTable的一种实现。
BigTable最浅显来看就是一张很大的表#xff0c;表的属性可以根据需求去动态增加#xff0c;但是又没有表与表之间…要实现操作hbase数据表首先要了解它的原理
1,Hbase原理篇
HBASE就是基于Hadoop的一个开源项目也是对Google的BigTable的一种实现。
BigTable最浅显来看就是一张很大的表表的属性可以根据需求去动态增加但是又没有表与表之间关联查询的需求。
BigTable是Google为分布存储和管理内部大规模结构化数据而设计的分布式数据库系统是Google云 基础架构组成之一具有良好的可扩展性可在上千台廉价服务器上存储petabyte级别的数据。它不提供完整的关系数据模型只提供简单的数据模型这使得客户端可以动态控制数据的布局和格式。
BigTable就是张大表这张表其实和我们想象的传统数据库的表还是有些差别的。这个表是一个稀疏的多维度映射表排序后分布式地永久存储在硬盘上。这张映射表以行关键字、列关键字和时间戳作为索引每个值是一个未作解释的字节数组。行关键字可以是任意字符串在行关键字下的每个读写操作都是原子性的不管读写行中有多少不同的列。BigTable通过行关键字的字典序来维护数据一张表可动态划分成多个连续行连续行称为Tablet它是数据分布和负载均衡的基本单位。BigTable把列关键字分成组每组为一个列族列族是BigTable的基本访问控制单元。通常同一列族下存放的数据具有相同的类型。在创建列关键字存放数据之前必须先创建列族。在一张表中列族的数量不能太多列的数量则不受限制。BigTable表项可以存储不同版本的内容用时间戳来索引按时间戳倒序排列。
BigTable非常适合于存放松散数据松散数据可以说是介于Map Entrykey value和DB Row之间的一种数据。在使用Memcache的时候有时候的需求是需要存储的不仅仅是简单的一个key对应一个value可能需要类似于数据库表结构中多属性的存储但是又不会像传统数据库表结构中那样需要那么多关联关系其实这类数据就是所谓的松散数据。
在Google云计算基础架构里BigTable并不是孤立的它建立在其他数个Google框架上。BigTable使用GFS来存储日志和数据文件与其它分布式应用共享机器集群依赖集群管理系统来调度任务、管理资源、处理失效机器、监视机器状态等。BigTable采用Google SSTable格式存储数据SSTable提供永久存储的、有序的、不可改写的关键字到值的映射以及相应的查询操作。在SSTable尾部包含一个块索引用来定位数据。此外BigTable还使用Google分布式锁服务Chubby来解决一系列问题如保证任何时间最多只有一个活跃的主备份存储BigTable数据的启动位置发现Tablet服务器存储BigTable模式信息、存储访问权限等。
互联网应用有一个最大的特点就是速度功能再强大速度慢还是会被舍弃。因此在大访问量的网站都采取前后的缓存来提升性能和响应时间。对于Map Entry类型的数据集中式分布式Cache都有很多选择对于传统的关系型数据从MySQL到Oracle都给了很好的支持唯有松散数据这类数据采用前后两种解决方案都不能最大化它的处理能力。因此BigTable才有了它用武之地。
HBASE作为Apache的开源项目也是出于起步阶段因为其实它所依赖的Hadoop也不能说已经到了成熟阶段所以都有很大的发展空间这也为我们这些开源爱好者提供了更多空间去贡献。这里主要会谈到HBASE的框架设计方面的知识和它的一些特点不论是否采用HBASE去解决工作中的问题一种好的流程设计总会给开发者和架构设计者带来一些思想上的火花。
HBASE中的每一张表就是所谓的BigTable。BigTable会存储一系列的行记录行记录有三个基本类型的定义Row Key,Time Stamp,Column。Row Key是行在BigTable中的唯一标识Time Stamp是每次数据操作对应关联的时间戳可以看作类似于SVN的版本Column定义为family:label通过这两部分可以唯一的指定一个数据的存储列family的定义和修改需要对HBASE作类似于DB的DDL操作而对于label的使用则不需要定义直接可以使用这也为动态定制列提供了一种手段。family另一个作用其实在于物理存储优化读写操作同family的数据物理上保存的会比较临近因此在业务设计的过程中可以利用这个特性。
2、连接hbase的常见接口
连接HBase主要使用了HBase以下几个重要概念
HBaseConfiguration: 用于告诉client如何连接连接到哪个HBase的服务器上。
HTable代表一个HBase表格。
BatchUpdate用于表格中一行的更新。包括添加某个列修改某列的值删除某列等。
committable的一个方法。代表某个BatchUpdate操作可以生效了。类似于数据库中的commit操作。
Celltable中对应某个行key, 列值时间戳下的单元格值。获取Cell的方法。For example: table.get(myRow, myColumnFamily:columnQualifier1);
scanner用于遍历表格。
rowResult遍历过程当中保存某行信息。
我们在程序中连接并使用Hbase表时所需要做的一些step如下
首先,我们使用HBaseConfiguration来获取表的基本信息
接着我们通过HTable定义好我们需要连接表的表名
然后我们通过表的row与column来访问表对应于不同的操作目的有不同的方法如BatchUpdate、scanner、rowResult等
3、HBase操作示例
HBase是Hadoop中的一个简单数据库。它与Google的Bigtable特别相似但也存在许多的不同之处。
数据模型
HBase数据库使用了和Bigtable非常相似的数据模型。用户在表格里存储许多数据行。每个数据行都包括一个可排序的关键字和任意数目的列。表格是稀疏的所以同一个表格里的行可能有非常不同的列只要用户喜欢这样做。 列名是“族名:标签”形式其中族名和标签可以是任意字符串。一个表格的族名集合又叫“列族”集合是固定的除非你使用管理员权限来改变表格的列族。不过你可以在任何时候添加新的标签。HBase在磁盘上按照列族储存数据所以一个列族里的所有项应该有相同的读/写方式。 写操作是行锁定的你不能一次锁定多行。所有对行的写操作默认是原子的。 所有数据库更新操作都有时间戳。HBase对每个数据单元只存储指定个数的最新版本。客户端可以查询“从某个时刻起的最新数据”或者一次得到所有的数据版本。 概念模型
从概念上一个表格是一些行的集合每行包含一个行关键字和一个可选的时间戳和一些可能有数据的列稀疏。下面的例子很好的说明了问题
物理模型
在概念上表格是一个稀疏的行/列矩阵但是在物理上它们按照列存储。这是我们的一个重要设计考虑。 上面“概念上的”表格在物理上的存储方式如下所示 请大家注意在上面的图中没有存储空的单元格。所以查询时间戳为t8的“content:”将返回null同样查询时间戳为t9“anchor:”值为“my.look.ca”的项也返回null。 不过如果没有指明时间戳那么应该返回指定列的最新数据值并且最新的值在表格里也时最先找到的因为它们是按照时间排序的。所以查询“contents:”而不指明时间戳将返回t6时刻的数据查询“anchor:”的“my.look.ca”而不指明时间戳将返回t8时刻的数据。