今天就简单的介绍一下Hbase的java的api,有创建表,插入数据,查询数据。
先进入shell控制台,看看现有几个表:
image.png
一个rr表,一个user表
创建表:
前提要将对应hbase的lib包下的jar,拷贝到项目中
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.TableName;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import java.io.IOException;
/**
* 测试Hbase
*
* @author songlj
* @date 2018/5/24 22:50
*/
public class HbaseDao {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "my06:2181,my07:2181,my08:2181");
//ddl的操作对象
HBaseAdmin admin = new HBaseAdmin(conf);
//表名
TableName name = TableName.valueOf("user1");
HTableDescriptor desc = new HTableDescriptor(name);
//列族
HColumnDescriptor base_info = new HColumnDescriptor("base_info");
HColumnDescriptor extra_info = new HColumnDescriptor("extra_info");
//最大保存的历史版本个数
base_info.setMaxVersions(5);
desc.addFamily(base_info);
desc.addFamily(extra_info);
//创建表
admin.createTable(desc);
admin.close();
}
}
运行:
image.png结果:
image.png添加数据
@Test
public void insertTest() throws Exception{
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "my06:2181,my07:2181,my08:2181");
//获取dml客户端对象
HTable user1 = new HTable(conf, "user1");
//给列族中放列以及列值 k_v hbase存储的是bytes,而字节的数组
Put name = new Put(Bytes.toBytes("rk0001"));
name.add(Bytes.toBytes("base_info"), Bytes.toBytes("name"), Bytes.toBytes("songlj"));
Put age = new Put(Bytes.toBytes("rk0001"));
age.add(Bytes.toBytes("base_info"), Bytes.toBytes("age"), Bytes.toBytes(18));
ArrayList<Put> puts = new ArrayList<>();
puts.add(name);
puts.add(age);
user1.put(puts);
user1.close();
}
运行
image.png结果
image.png查询数据
@Test
public void testGet() throws Exception{
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "my06:2181,my07:2181,my08:2181");
HTable table = new HTable(conf, "user1");
Get get = new Get(Bytes.toBytes("rk0001"));
get.setMaxVersions(5);
Result result = table.get(get);
List<Cell> cells = result.listCells();
// result.getValue(family, qualifier); 可以从result中直接取出一个特定的value
//遍历出result中所有的键值对
for(KeyValue kv : result.list()){
String family = new String(kv.getFamily());
System.out.println(family);
String qualifier = new String(kv.getQualifier());
System.out.println(qualifier);
System.out.println(new String(kv.getValue()));
}
table.close();
}
运行结果:
image.png
这里就介绍到这里,还有scan,各种过滤器,就不在这里赘述了,实际的应用中用到了可以去查看一下,很简单,懂得了hbase java api的设计技巧,能够做到举一反三。
望指正,不吝赐教
网友评论