前言
1. 创建表:(由master完成)
首先需要获取master地址(master启动时会将地址告诉zookeeper)因而客户端首先会访问zookeeper获取master的地址
client和master通信,然后有master来创建表(包括表的列簇,是否cache,设置存储的最大版本数,是否压缩等)。
2. 读写删除数据
client与regionserver通信,读写、删除数据
写入和删除数据时讲数据打上不同的标志append,真正的数据删除操作在compact时发生
3. 版本信息
API基础知识
CRUD操作:
put:插入单行或者多行
get: 读取数据或者使用scan()
delete:删除数据
batch(): 批量处理操作
scan:
类似于数据库中的游标cursor
HTable常用方法:
void close(): 用完一个HTable实例后需要调用一次close(),(这个方法会隐式的调用flushCache方法)
byte[] getTableName() 获取表名
Configuration getConfiguration(): 获取HTable实例中的配置
HTableDescriptor getTableDescriptor(): 获取表的结构
static boolean isTableEnabled(table): 查看表是否禁用
configuration
HbaseConfiguration, 表示HBase的配置信息
两种构造函数如下:
public HBaseConfiguration() -----------默认的构造方式会从hbase-default.xml和hbase-site.xml中读取配置,如果classpath中没有这两个文件,需要自己配置
public HBaseConfiguration(final Configuration c)
eg:
static Configuration cfg =HBaseConfiguration.create();static{
cfg.set("hbase.zookeeper.quorum", "192.168.1.95");
cfg.set("hbase.zookeeper.property.clientPort", "2181");
}
注意: new HBaseConfiguration()方式已经启用,不建议使用下面方式。
static HBaseConfiguration cfg = null;
static {
Configuration HBASE_CONFIG = new Configuration();
HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.1.95");
HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
cfg = new HBaseConfiguration(HBASE_CONFIG);
}
创建表
使用HBaseAdmin对象的createTable方法
eg:
public static voidcreateTable(String tableName) {
System.out.println("************start create table**********");try{
HBaseAdmin hBaseAdmin= newHBaseAdmin(cfg);if (hBaseAdmin.tableExists(tableName)) {//如果存在要创建的表,那么先删除,再创建
hBaseAdmin.disableTable(tableName);
hBaseAdmin.deleteTable(tableName);
System.out.println(tableName+ " is exist");
}
HTableDescriptor tableDescriptor= new HTableDescriptor(tableName);//代表表的schema
tableDescriptor.addFamily(new HColumnDescriptor("name")); //增加列簇
tableDescriptor.addFamily(new HColumnDescriptor("age"));
tableDescriptor.addFamily(new HColumnDescriptor("gender"));
hBaseAdmin.createTable(tableDescriptor);
}catch(MasterNotRunningException e) {
e.printStackTrace();
}catch(ZooKeeperConnectionException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
System.out.println("*****end create table*************");
}
public static voidmain(String[] agrs) {try{
String tablename= "wishTest";
HBaseTest.createTable(tablename);
}catch(Exception e) {
e.printStackTrace();
}
}
日志信息如下:
************start create table**********
14/05/18 14:14:22 INFO zookeeper.ZooKeeper: Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
14/05/18 14:14:22 INFO zookeeper.ZooKeeper: Client environment:host.name=LJ-PC
14/05/18 14:14:22 INFO zookeeper.ZooKeeper: Client environment:java.version=1.6.0_11
14/05/18 14:14:22 INFO zookeeper.ZooKeeper: Client environment:java.vendor=Sun Microsystems Inc.
14/05/18 14:14:22 INFO zookeeper.ZooKeeper: Client environment:java.home=D:\java\jdk1.6.0_11\jre
14/05/18 14:14:22 INFO zookeeper.ZooKeeper: Client environment:java.class.path=....
...
14/05/18 14:14:22 INFO zookeeper.RecoverableZooKeeper: The identifier of this process is 6560@LJ-PC
14/05/18 14:14:22 INFO zookeeper.ClientCnxn: Socket connection established to hadoop/192.168.1.95:2181, initiating session
14/05/18 14:14:22 INFO zookeeper.ClientCnxn: Session establishment complete on server hadoop/192.168.1.95:2181, sessionid = 0x460dd23bda0007, negotiated timeout = 180000
14/05/18 14:14:22 INFO zookeeper.ZooKeeper: Session: 0x460dd23bda0007 closed
14/05/18 14:14:22 INFO zookeeper.ClientCnxn: EventThread shut down
*****end create table*************
在centos中查看是否创建成功:
网页上查看: