Hbase基本API的使用

package test;

import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;


public class HbaseDemo 
{
    //HBase是基于Hadoop的开源数据库,他以Google的BigTable为原型实现的
    //Region服务器
    //HBase在行的方向上将表分成多个Region,每个Region包含一定范围内的数据。随着表中的数据不断的增加    
    //一个Region会被分成多个新的Region
    //Region是HBase中分布式存储和负载均衡的最小单位,即一个表所有的Region会被分到多个Region服务器上
    //每个Region由一个或多个Store组成,每个Store保存一个列族的所有的数据,
    //每个Store由一个或多个memStore组成
     
    //主服务器
    //HBase每个时刻只有一个HMaster(主服务器程序)在运行HMaster将Region分配给Region服务器
    public static void main(String[] args) throws Exception{
    Configuration conf = HBaseConfiguration.create(); //初始化HBase的配置文件
    conf.set("hbase.zookeeper.quorum", "UbubtuSlave1,UbuntuSlave2,UbuntuSlave3");//指定HBase使用的Zookeeper的地址
    HBaseAdmin admin = new HBaseAdmin(conf);//实例化HBaseAdmin(该类用于对表的元数据进行操作并提供了基本的管理操作)

    HTableDescriptor tableDescriptor = new HTableDescriptor("tab1".getBytes());
    tableDescriptor.addFamily(new HColumnDescriptor("fam1"));
    admin.createTable(tableDescriptor);//创建一张新表,参数为类HTableDescriptor,其中是对表名和相关的列族的描述
    HTable table = new HTable(conf,"tab1"); //可对表进行相关操作的类

    Put putRow1 = new Put("row1".getBytes());//可以向表中插入数据,初始化时可以传递一个行键,表示向那一行插入数据
    putRow1.add("fam1".getBytes(), "coll".getBytes(),"vall".getBytes());//插入数据
    table.put(putRow1);

    System.out.println("add row2");
    Put putRow2 = new Put("row2".getBytes());
    putRow2.add("fam1".getBytes(), "col2".getBytes(), "val2".getBytes());
    putRow2.add("fam1".getBytes(), "col3".getBytes(), "val3".getBytes());
    table.put(putRow2);

    for(Result row:table.getScanner("fam1".getBytes()))//table.getScanner获得某一列族的所有数据,方法返回Result类
    {
        System.out.format("ROW\t%s\n", new String(row.getRow()));
        for(Map.Entry<byte[],byte[]> entry :row.getFamilyMap("fam1".getBytes()).entrySet())
        {
            //Result.getFamilyMap()可以获得以列名为key值为value的映射表
            String column = new String(entry.getKey());
            String value = new String(entry.getValue());
            System.out.format("COLUMN\tfam1:%s\t%s\n", column,value);
        }
      }

    admin.disableTable("tab1");//删除表tab1
    admin.deleteTable("tab1");//删除表tab1
    }
}
 

猜你喜欢

转载自oaksun.iteye.com/blog/1943526