java API操作HBase(二)

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集成(三)

猜你喜欢

转载自blog.csdn.net/qq_42806727/article/details/89096285