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
}
}