关于HBase的前后因果先不讨论,现在写一个Hbase实例,怎么样去创建一个Hbase的列簇.
public class HbaseTable {
//定义一个hbase连接
Configuration conf = null;
//构造方法初始化,连接到hbase数据库
HbaseIf() {
//创建Hbase数据库的连接,默认本地
conf=HBaseConfiguration.create();
}
//创建一个Table
public void create_table(String name, String col, int version)
throws Exception {
//创建一个对象,连接到Hbase
HBaseAdmin admin = new HBaseAdmin(conf);
//判断一个Tbale是否存在,若存在,则删除该Table
if (admin.tableExists(name)) {
admin.disableTable(name);
admin.deleteTable(name);
}
//初始化Tbale,传入Table名称
HTableDescriptor htd = new HTableDescriptor(name);
//初始化列,传入列名称
HColumnDescriptor hcd = new HColumnDescriptor(col);
//设置Hbase最大版本号
hcd.setMaxVersions(1);
//网一个Table中插入一个列簇
htd.addFamily(hcd);
//创建一个Tbale
admin.createTable(htd);
}
/*
* tab_global param:userid
*
* tab_user2id info:id
*
* tab_id2user info:username, info:password
*/
public void createTables() throws Exception {
//创建一个名为tab_global的Table,列为param的列
create_table("tab_global","param",1);
//创建一个名为row_userid的RowKey,Hbase都是村二进制的数据所以要转化的Byte
Put put=new Put(Bytes.toBytes("row_userid"));
int i=1;
//在列簇中创建一条数据,列簇名是param:userid
put.add(Bytes.toBytes("param"), Bytes.toBytes("userid"), Bytes.toBytes(i));
//往Table里插入数据
HTable ht=new HTable(conf,"tab_global");
ht.put(put);
//创建一个名为tab_user2id的Table,列为info的列
create_table("tab_user2id","info",1);
create_table("tab_id2user","info",1);
}
public static void main(String[] args) throws Exception {
HbaseTable hbase=new HbaseTable();
hbase.createTables();
}
}
运行该对象数据即可插入。
验证:在hbase shell中输入 list 会出现三个表
tab_global
tab_id2user
tab_user2id
输入:scan 'tab_global' 会出现插入的数据
hbase(main):002:0> scan 'tab_global'
ROW COLUMN+CELL
row_userid column=param:userid, timestamp=1377096845757, value=\x00\x00\x00\x01
如图: