Hbase的javaAPI 一、API这里进入Hbase的javaAPI章节进行学习,这里我会非常详细的讲述如何创建连接和基础的使用,以及一个小项目的学习。跟随着我往下看
几个主要的Hbase API类和数据模型之间的的对应的关系:
- HbaseConfiguration:最简单的一个饿类,可以在进行连接的时候,指定一些简单的配置,比如URL地址,在哪里找Hbase或者Hbase 的一些配置等等HbaseAdmin类,如果想对Hbase 的表进行一些操作,比如DDL操作(数据定义语言,比如create,drop等),但是hbase没有sql语句,所以这里类比于DDL。修改表结构、创建表、删除表。HTable:和Hbase表进行联系。HTableDescriptor:描述表的结构,表的结构就是列簇。
1.2HTablleDescriptor类:org.apache.hadoop.hbase.client.HbaseAdmin作用:提供一个接口来管理Hbase数据库的恶表信息。它提供的方法包括:创建表,删除 表,列出表项,使表有效或者无效,以及添加或删除表列簇成员等。
1.3HColumnDescriptor*类:org.apache.hadoop.hbase.HTableDescriptor
*作用;包含了表的名及其对应表的列簇
1.4HTable*类: org.apache.hadoop.hbase.HCoiumnDescriptoor
*作用:维护着关于列簇的信息,例如版本号,压缩设置等 。他通常在创建表或者 为表添加列簇的时候使用。列簇被创建之后不能直接修改,只能通过删除然后来重新创建的方式。
列簇被删除的时候,列簇里面的数据 也会同时被删除。
1.5 Result类*org.apache.hadoop.hbase.client.Htable
*作用:可以用来和Hbase表直接通信。此方法对于更新
二、Java代码*类:org.apache.hadoop.hbase.client.Result
*作用:存储Get或者Scan操作后获取的单行值。使用此类提供的方法可以直接获取值或者各种Map结构(key-value对)。
看代码详细讲解
public static void main(String[] args) throws Exception{
//1.创建配置文件,设置Hbase的连接地址
Configuration cconf=HbaseConfiguration.create()
conf.set("hbase.zookeeper.quorum", "192.168.3.67:2181,192.168.3.68:2181,192.168.3.69:2181")
//2.创建连接
Connection connection = ConnectionFactory.ceateConnection(conf);
Admin admin = connection.getAdmin();
Table stu = connection.getTable(TableName.valueOf("stu"));
connection.close();
}
这里只是简单的进行讲解,下面来看详细的讲解
这里的创建连接就不说了,就是把这里的局部变量变成全局变量即可
Connection connection;
Admin admin;
@BeforeTest
public void beforeTest() throws Exception{
//1.创建Hbase配置,使用HbaseConfiguration.create();来进行创建
Configuration conf = HbaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "192.168.3.67:2181,192.168.3.68:2181,192.168.3.69:2181");
//2.使用 ConnectionFactory.createConnection创建Hbase链接
connection = ConnectionFactory.createConnection(conf);
//3.要创建表,需要基于Hbase链接获取admin管理对象
//要创建表、删除表需要和HMaster进行链接,所以需要有一个admin对象
admin = connection.getAdmin();
}
//创建表
//首先我们需要判断表是否存在
//在Hbase中,需要创建表,需要构建TableDescriptor(表描述器)、
// ColumnFamilyDescriptor(列蔟描述器),这两个对象不是直接new出来,
// 是通过builder来创建的
@Test
public void creatTable() throws Exception{
//首先要get一个admin对象,但是我们在创建连接的时候,已经get过了,这里可以忽略
//构建表,使用HtableDescriptor,没有我们需要先new一个
HTableDescirptor testAPI = new HTableDescriptor(TableName.valueOf("TestAPI"));
//表创建完成以后,这里需要创建表结构,
//首先创建列簇
HColumnDescriptor info = new HColumnDescriptor("info");
//如果想对列簇进行配置的话,可以使用add】方法
info.setMaxVerdsion(3);/
//加入列簇, 给testAPI表添加一个列簇
testAPI.addFamily(info);
//使用areatTable方法,、把参数传进去
this.admin.creatTable(testAPI);
}
@Test
//查看表
public void listTable() throws Exception {
TableName[] tableNames = admin.listTableNames();
for (TableName tableName : tableNames) {
System.out.println(tableName.getNameAsString());
}
}
上面查询的只是表的查询,这里来看看表结构的查询
@Test
//查看表结构,使用desc方法进行查看
public void descList() throws Exception{
//如何判断是getmian还是gettable呢,就看是否和数据有关系。
// 如果和数据没有关系的话,就用getAdmin()
}
批量写入
@Test
public void PutAllStu() throws Exception{
//可能会被多次使用,所以要提取出来
TableName stu = TableName.valueOf("stu");
//创建表
Admin admin = connection.getAdmin();
//首先要判断这张表
if(admin.tableExists(stu)){
//先放一个表结构进去,表结构需要表名,先穿进去表名
//然后添加一个列簇,列簇又要new一个列簇的结构
//这里利用的是匿名对象的方式调用
admin.createTable(new HTableDescriptor(stu)
.addFamily(new HColumnDescriptor("info")));
}
//对表进行链接
Table stuTable = connection.getTable(stu);
ArrayList puts = new ArrayList<>();
//读取文件,使用BufferedReader来读取
BufferedReader bufferedReader = new BufferedReader(new FileReader("ddata/students.txt"));
int clt = 0;
String line;
while ((line = bufferedReader.readLine())!=null){
//把每一列切分
String[] split = line.split(",");
String id = split[0];
String name = split[1];
String age = split[2];
String gender = split[3];
String clazz = split[4];
Put put = new Put(id.getBytes());
put.addColumn("info".getBytes(),"name".getBytes(),name.getBytes());
put.addColumn("info".getBytes(),"age".getBytes(),age.getBytes());
put.addColumn("info".getBytes(),"gender".getBytes(),gender.getBytes());
put.addColumn("info".getBytes(),"clazz".getBytes(),clazz.getBytes());
puts.add(put);
//这里put了1000次
// 逐条插入,效率较低
// stuTable.put(put);
}
//调用put,把put的list传进去
stuTable.put(puts);
clt+=1;
if(clt == 100){
stuTable.put(puts);
puts.clear();//清空
clt = 0;
}
bufferedReader.close();
}



