HBase简介
HBase – Hadoop Database,是Google的BigTable的开源实现,是一个高可靠性、面向列、可伸缩的非关系型分布式数据库。HBase 可与 Hadoop 无缝配合, HDFS为HBase提供了高可靠性的底层存储支持,MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
HBase存储的是松散型数据,具体来说,HBase存储的数据介于映射(key/value)和关系型数据之间,它具有快速查找数据和连续读写等能力。
HBase的具有以下的特点:
Key-Value存储
Key和Value是字节数组(二进制字节)
支持大数据量
一个表可以有上亿行,上百万列
高度可扩展
得益于Hadoop集群,支持水平扩展
自动数据分区
低延迟
支持随机读/写
支持小范围扫描
无固定格式
对稀疏数据的存储非常有利
支持变化的Schema
支持丰富的Java API,也可通过Pig,Hive访问
关于HBase更多的技术细节,请参考Apache HBase管理。
BigSQL 简介
BigSQL是IBM的SQL on Hadoop解决方案,它能对存储在Hadoop上的数据通过标准的SQL进行高性能访问。关于BigSQL的基础内容请参考前期的文章《BigSQL发动机的结构和工作原理》。
与创建和操作Hadoop表类似,BigSQL支持创建和操作HBase 表。下面我们通过建表、加载数据、查询数据三个示例进行演示和说明。
建表
在BigSQL中使用CREATE HBASE TABLE tblname(…) COLUMN MAPPING(…) 语句创建HBase表。其中HBASE指明BigSQL引擎使用HBase作为存储管理器,“COLUMN MAPPING”则指明SQL的字段如何与HBase中列簇(Column Families)进行映射。建表例子如下。
为了演示简单,这个例子中的SQL字段与HBase字段采用1:1映射。但在某些场景下,我们可以将多个SQL字段映射到一个HBase 字段或HBase的Row Key。
运行该建表语句,它会在HBase的数据目录(缺省是/hbase/data/default)生成子目录。通过Hadoop文件系统命令,你能看到下图的目录结构。注意,建表语句中指定了3个Column Families,所以在Hadoop文件系统中对应三个子目录。
加载数据
在BigSQL创建HBase表之后,我们可以采用LOAD和INSERT INTO进行数据加载,通常LOAD能提供更好的性能。下面是常用的加载数据例子。
从远端的文件系统LOAD数据:
通过Java连接器从关系型数据库(DB2,Oracle等)加载数据。这种方式实际上使用Sqoop连接器去获取关系型数据作为源数据。
使用“INSERT INTO . . . SELECT FROM . ..”加载数据:
使用“INSERT INTO . . . VALUES(. . . ) ”填充数据:
查询
BigSQL支持标准的SQL语法,对HBase表的操作与对Hive,HDFS操作是一致的,这得益于BigSQL对查询操作屏蔽了底层存储机制。从而,对HBase的查询无需特殊的句法,也不需要重新改写你的查询语句。BigSQL对HBase支持以下操作:
查询操作
Projection、Restriction
UNION、INTERSECT、EXCEPT
广泛的内置函数 (e.g. OLAP)
充分支持子查询
SELECT、FROM、WHERE 和 HAVING 字句
关联与非关联
等式、非等式子查询
EXISTS、NOT EXISTS、IN、ANY、SOME等等
所有标准的Join操作
存储过程和UDF
当前版本(最新)的HBase row value查询。注:如果想访问非当前版本的数据,请使用原生的HBase API。
小结
“CREATE HADOOP TABLE…”用于创建Hadoop上各种存储格式的表,而“CREATE HBASE TABLE…”用于创建HBase表。各种存储格式对应的建表语句略有不同,但查询数据的方式是一致,应用BigSQL采用标准SQL进行数据操作。
联系客服