HBase基本的数据操作

概述

对于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空间创建表,也可以直接创建表,进入default表空间。

对于数据操作,HBase支持四类主要的数据操作,分别是:

Put :增加一行,修改一行;

Delete :删除一行,删除指定列族,删除指定column的多个版本,删除指定column的制定版本等;

Get :获取指定行的所有信息,获取指定行和指定列族的所有colunm,获取指定column,获取指定column的几个版本, 获取指定column的指定版本等; 

Scan :获取所有行,获取指定行键范围的行,获取从某行开始的几行,获取满足过滤条件的行等。

这四个类都是 org.apache.hadoop.hbase.client的子类,可以到官网API去查看详细信息,本文仅总结常用方法,力争让读者用20%的时间掌握80%的常用功能。


1. 命名空间Namespace


在关系数据库系统中,命名空间


namespace指的是一个 表的逻辑分组 ,同一组中的表有类似的用途。命名空间的概念为 即将到来 的多租户特性打下基础:


配额管理( Quota Management (HBASE-8410)):限制一个namespace可以使用的资源,资源包括region和table等;


命名空间安全管理( Namespace Security Administration (HBASE-9206)):提供了另一个层面的多租户安全管理; 


Region服务器组(Region server groups (HBASE-6721)):一个命名空间或一张表,可以被固定到一组 regionservers上,从而保证了数据隔离性。


1.1.命名空间管理


命名空间可以被创建、移除、修改。


表和命名空间的隶属关系 在在创建表时决定,通过以下格式指定:


:


Example:hbase shell中创建命名空间、创建命名空间中的表、移除命名空间、修改命名空间


#Create a namespace create_namespace 'my_ns' 


#create my_table in my_ns namespace create 'my_ns:my_table', 'fam' 


#drop namespace drop_namespace 'my_ns' 


#alter namespace alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'} 


1.2. 预定义的命名空间


有两个系统内置的预定义命名空间:


hbase :系统命名空间,用于包含hbase的内部表 
default : 所有未指定命名空间的表都自动进入该命名空间
Example:指定命名空间和默认命名空间
#namespace=foo and table qualifier=bar create 'foo:bar', 'fam' #namespace=default and table qualifier=bar create 'bar', 'fam'


2.创建表
Configuration conf = HBaseConfiguration. create ();


        HBaseAdmin admin =  new  HBaseAdmin(conf);


         //create  namespace  named "my_ns"


        admin.createNamespace(NamespaceDescriptor. create ( "my_ns" ).build());


         //create tableDesc, with  namespace  name "my_ns" and table name "mytable "


        HTableDescriptor tableDesc =  new  HTableDescriptor(TableName. valueOf ("my_ns:mytable" ));


         tableDesc.setDurability(Durability. SYNC_WAL );


         //add a column family " mycf "


        HColumnDescriptor hcd =  new  HColumnDescriptor( "mycf" );


        tableDesc.addFamily(hcd);


        admin.createTable(tableDesc);


        admin.close();