HBase java API
- maven依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-protocol</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.2.4</version>
</dependency>
- 创建Connection和Admin对象
private Connection conn;
private Admin admin;
@Before
public void before() throws IOException {
Configuration config= HBaseConfiguration.create();
//因为HMaster和HRegionServer都将信息注册在zookeeper中
config.set("hbase.zookeeper.quorum","centos");
conn= ConnectionFactory.createConnection(config);
admin=conn.getAdmin();
}
@After
public void after() throws IOException {
admin.close();
conn.close();
}
- 创建Namespace
NamespaceDescriptor nd=NamespaceDescriptor.create("zpark")
.addConfiguration("author","zhangsan")
.build();
admin.createNamespace(nd);
- 创建表
//create 'zpark:t_user',{NAME=>'cf1',VERIONS=>3},,{NAME=>'cf2',TTL=>10}
TableName tname=TableName.valueOf("zpark:t_user");
//创建表的描述
HTableDescriptor t_user=new HTableDescriptor(tname);
//构建列簇
HColumnDescriptor cf1=new HColumnDescriptor("cf1");
cf1.setMaxVersions(3);
HColumnDescriptor cf2=new HColumnDescriptor("cf2");
cf2.setTimeToLive(10);
//添加列簇
t_user.addFamily(cf1);
t_user.addFamily(cf2);
admin.createTable(t_user);
- 插入数据
TableName tname=TableName.valueOf("zpark:t_user");
Table t_user = conn.getTable(tname);
String[] company={"www.baizhi.com","www.sina.com"};
for(int i=0;i<1000;i++){
String com=company[new Random().nextInt(2)];
String rowKey=com;
if(i<10){
rowKey+=":00"+i;
}else if(i<100){
rowKey+=":0"+i;
}else if(i<1000){
rowKey+=":"+i;
}
Put put=new Put(rowKey.getBytes());
put.addColumn("cf1".getBytes(),"name".getBytes(),("user"+i).getBytes());
put.addColumn("cf1".getBytes(),"age".getBytes(), Bytes.toBytes(i));
put.addColumn("cf1".getBytes(),"salary".getBytes(),Bytes.toBytes(5000+1000*i));
put.addColumn("cf1".getBytes(),"company".getBytes(),com.getBytes());
t_user.put(put);
}
t_user.close();
- 批量插入
TableName tname=TableName.valueOf("zpark:t_user");
String[] company={"www.baizhi.com","www.sina.com"};
BufferedMutator mutator=conn.getBufferedMutator(tname);
for(int i=0;i<1000;i++){
String com=company[new Random().nextInt(2)];
String rowKey=com;
if(i<10){
rowKey+=":00"+i;
}else if(i<100){
rowKey+=":0"+i;
}else if(i<1000){
rowKey+=":"+i;
}
Put put=new Put(rowKey.getBytes());
put.addColumn("cf1".getBytes(),"name".getBytes(),("user"+i).getBytes());
put.addColumn("cf1".getBytes(),"age".getBytes(), Bytes.toBytes(i));
put.addColumn("cf1".getBytes(),"salary".getBytes(),Bytes.toBytes(5000+1000*i));
put.addColumn("cf1".getBytes(),"company".getBytes(),com.getBytes());
mutator.mutate(put);
}
mutator.close();
mutator.close();
- 修改数据
TableName tname=TableName.valueOf("zpark:t_user");
Table t_user = conn.getTable(tname);
Put put=new Put("www.baizhi.com:000".getBytes());
put.addColumn("cf1".getBytes(),"name".getBytes(),("zhangsan").getBytes());
t_user.put(put);
t_user.close();
- 查询一条记录
TableName tname=TableName.valueOf("zpark:t_user");
Table t_user = conn.getTable(tname);
Get get=new Get("www.sina.com:002".getBytes());
//表示一行数据,涵盖n个cell
Result result = t_user.get(get);
String name = Bytes.toString(result.getValue("cf1".getBytes(), "name".getBytes()));
Integer age = Bytes.toInt(result.getValue("cf1".getBytes(), "age".getBytes()));
Integer salary = Bytes.toInt(result.getValue("cf1".getBytes(), "salary".getBytes()));
System.out.println(name+","+age+","+salary);
t_user.close();
- 查询多条
TableName tname=TableName.valueOf("zpark:t_user");
Table t_user = conn.getTable(tname);
Scan scan=new Scan();
// scan.setStartRow("www.baizhi.com:000".getBytes());
// scan.setStopRow("www.taizhi.com:020".getBytes());
Filter filter1=new PrefixFilter("www.baizhi.com:00".getBytes());
Filter filter2=new PrefixFilter("www.sina.com:00".getBytes());
FilterList filter=new FilterList(FilterList.Operator.MUST_PASS_ONE,filter1,filter2);
scan.setFilter(filter);
ResultScanner resultScanner = t_user.getScanner(scan);
for (Result result : resultScanner) {
String rowKey=Bytes.toString(result.getRow());
String name = Bytes.toString(result.getValue("cf1".getBytes(), "name".getBytes()));
Integer age = Bytes.toInt(result.getValue("cf1".getBytes(), "age".getBytes()));
Integer salary = Bytes.toInt(result.getValue("cf1".getBytes(), "salary".getBytes()));
System.out.println(rowKey+" => "+ name+","+age+","+salary);
}
t_user.close();
- 查询多条+Filter
TableName tname=TableName.valueOf("zpark:t_user");
Table t_user = conn.getTable(tname);
Scan scan=new Scan();
// scan.setStartRow("www.baizhi.com:000".getBytes());
// scan.setStopRow("www.taizhi.com:020".getBytes());
Filter filter1=new PrefixFilter("www.baizhi.com:00".getBytes());
Filter filter2=new PrefixFilter("www.sina.com:00".getBytes());
FilterList filter=new FilterList(FilterList.Operator.MUST_PASS_ALL,filter1,filter2);
scan.setFilter(filter);
ResultScanner resultScanner = t_user.getScanner(scan);
for (Result result : resultScanner) {
String rowKey=Bytes.toString(result.getRow());
String name = Bytes.toString(result.getValue("cf1".getBytes(), "name".getBytes()));
Integer age = Bytes.toInt(result.getValue("cf1".getBytes(), "age".getBytes()));
Integer salary = Bytes.toInt(result.getValue("cf1".getBytes(), "salary".getBytes()));
System.out.println(rowKey+" => "+ name+","+age+","+salary);
}
t_user.close();
上一篇:NoSQL 之 HBase(一)
下一篇:HBase和MapReduce集成(三)