Hbase API使用总结
举个例子:
Hbase的java的API接口相对比较简单,举个创建表的例子来看:
public class HbaseApiTest {
staticConfiguration conf = null;
static{
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","132.121.127.33");
conf.set("hbase.zookeeper.property.clientPort","2181");
}
/*
* 创建表
*
* @tableName 表名
*
* @family 列族列表
*/
public static void creatTable(String tableName, String[] family)
throws Exception {
// Connection connection =ConnectionFactory.createConnection(conf);
// HBaseAdmin admin =(HBaseAdmin) connection.getAdmin();
HBaseAdmin admin = newHBaseAdmin(conf);
HTableDescriptor desc = new HTableDescriptor(tableName);
for (int i = 0; i < family.length; i++) {
desc.addFamily(new HColumnDescriptor(family[i]));
}
if (admin.tableExists(tableName)) {
System.out.println("table Exists!");
System.exit(0);
} else {
admin.createTable(desc);
System.out.println("create table Success!");
}
}
/**
*
*@author : zhengrf1
*@date 创建时间:2017年10月25日下午4:39:07
*/
publicstatic void main(String[] args) {
//TODO Auto-generated method stub
String[]family = {"column1","column2"};
try{
creatTable("table1",family);
}catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--可见hbase主要是创建HBaseConfiguration对象,并且填充hbase所用的zookeeper的ip和端口,然后创建HBaseAdmin对象,HBaseAdmin作为元数据管理者,创建HTableDescriptor对象,HTableDescriptor作为表结构描述对象,往这个对象中填充表结构下面列族的相关信息,最后HBaseAdmin调用createTable(HTableDescriptor des),在hbase中创建表。可见HBaseAdmin内部持有了对hbase数据库的连接(并且应该是new HBaseAdmin(conf))的时候创建。
Hbase的API中相关的类和逻辑数据结构的对应关系
很大程度上,对于hbase的API操作就是围绕上面的几个类展开,关于这些类的更具体介绍可以参考博文:http://www.cnblogs.com/liuwei6/p/6842536.html
Hbase应用API进行读写操作的例子
1.往指定的表中对相关列族进行数据写操作
public static void addData(String rowKey,String tableName, String columnFamily1, String columnFamily2,
String[] column1, String[] value1, String[] column2, String[] value2)throwsException {
HTable table = new HTable(conf,tableName);
Put put = new Put(rowKey.getBytes());
HColumnDescriptor[] columnDescriptors =table.getTableDescriptor().getColumnFamilies();
for(int i=0;i<columnDescriptors.length; i++){
if(columnDescriptors[i].getNameAsString().equals(columnFamily1)){
for(int j=0;j<column1.length; j++){
put.add(columnFamily1.getBytes(),column1[j].getBytes(), value1[j].getBytes());
}
}
if(columnDescriptors[i].getNameAsString().equals(columnFamily2)){
for(int j=0;j<column2.length; j++){
put.add(columnFamily2.getBytes(),column2[j].getBytes(), value2[j].getBytes());
}
}
}
table.put(put);
System.out.println("add dataSuccess!");
}
2.对指定的表中对相关列族下面的字段进行数据读操作
public static void getResultByColumn(StringtableName, String rowKey,
String familyName, String columnName) throws IOException {
HTable table = new HTable(conf,tableName);
Get get = new Get(rowKey.getBytes());
get.addColumn(familyName.getBytes(),columnName.getBytes());
Result result = table.get(get);
for(KeyValue kv : result.list()){
System.out.println("family:"+new String(kv.getFamily()));
System.out.println("qualifier:"+new String(kv.getQualifier()));
System.out.println("value:"+new String(kv.getValue()));
System.out.println("Timestamp:"+kv.getTimestamp());
}
}