通过Java 操作Hbase

通过Java 操作Hbase


一、版本:

hbase:

通过Java 操作Hbase_第1张图片


二、操作Hbase:

1、首先定义几个用的到的全局变量:

HBaseAdmin :主要对于表的一些设置操作

HBaseAdmin hBaseAdmin;

HTable:主要涉及到对标内容的操作

HTable hTable;

TN:测试的表名

String TN = "lillcol";

2、创建begin()方法初始化资源:

//初始化Configuration  hBaseAdmin hTable

public void begin() throws Exception {

Configuration conf = new Configuration();

// conf.set("hbase.zookeeper.quorum", "node1.noce2.noce3");

hBaseAdmin = new HBaseAdmin(conf);

hTable = new HTable(conf, TN);

}

3、创建end()方法关闭资源:

//关闭hBaseAdmin  hTable 资源 注意先判断是否为null

public void end() {

if (hBaseAdmin != null) {

try {

hBaseAdmin.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if (hTable != null) {

try {

hTable.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

4、创建一个Table

注:不同版本可能会有不一样的方法,此方法适合0.9的,至于1.0是否能用后面会尝试 

//创建一个新的Table


public void createTable() throws Exception {


//初始化

begin();

//首先判断表存不存在  存在删除

if (hBaseAdmin.tableExists(TN)) {

hBaseAdmin.disableTable(TN);

hBaseAdmin.deleteTable(TN);

}

//1.2以后的版本 好像不用 HTableDescriptor了

//过段时间在更新1.2以后的版本

HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(TN));

//创建列族

HColumnDescriptor family1 = new HColumnDescriptor("column1");

//对表的一些设置

family1.setBlockCacheEnabled(true);

family1.setInMemory(true);

family1.setMaxVersions(2);

//添加列族

desc.addFamily(family1);

hBaseAdmin.createTable(desc);

System.out.println("create table success");

//关闭资源

end();

}

5、模拟插入数据(参考了尚学堂的学习资料 模拟数据)

// 获得手机号   

 public String getPhoneNum(String prefix) {        

return prefix + String.format("%8d", r.nextInt(999999999));

    } 

   //获得日期    public String getDate(String year) { 

       return year+ String.format(  "%02d%02d%02d%02d%02d", new Object[] { r.nextInt(12) + 1, r.nextInt(29) + 1, r.nextInt(60), r.nextInt(60), r.nextInt(60) });    } 

   public void insertDB() throws Exception {  

      begin();   

   // 创建一个List缓存     

   Listputs = new ArrayList();

//为一个用户生成十条模拟数据

for (int i = 0; i < 10; i++) {

String rowKey;

String phoneNum = getPhoneNum("186");

for (int j = 0; j < 100; j++) {

String phoneData = getDate("2016");

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

try {

long dataLong = sdf.parse(phoneData).getTime();

rowKey = phoneNum + (Long.MAX_VALUE - dataLong);

// System.out.println(rowKey);

Put put = new Put(rowKey.getBytes());

put.add("column1".getBytes(), "name".getBytes(), "lillcol".getBytes());

//将入list缓存

puts.add(put);

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//批量添加数据

hTable.put(puts);

end();

}


6、查询数据

//查询数据


public void scandDB() throws Exception {

begin();

Scan scan = new Scan();

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

//设置开始rowKey  和结束rowKey

String startRowKey = "18828394827" + (Long.MAX_VALUE - sdf.parse("2016010100000").getTime());

scan.setStartRow(startRowKey.getBytes());

String stopRowKey = "18828394827" + (Long.MAX_VALUE - sdf.parse("2016020100000").getTime());

scan.setStopRow(stopRowKey.getBytes());

ResultScanner scanner = hTable.getScanner(scan);

for (Result rs : scanner) {

//rs.getColumnLatestCell("colmun1".getBytes(), "name".getBytes())) 获取到的数据需要经过CellUtil.cloneValue在转换成String

System.out.println(new String(CellUtil.cloneValue(rs.getColumnLatestCell("colmun1".getBytes(),

"name".getBytes()))));

}

end();

}


7、带过滤器的查询

//具体的方法可以去看官网的文档

//带过滤器的查询


public void scandDB2() throws Exception {

begin();

FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);

PrefixFilter prefixFilter = new PrefixFilter("18827385967".getBytes());

list.addFilter(prefixFilter);

SingleColumnValueExcludeFilter singleColumnValueExcludeFilter = new SingleColumnValueExcludeFilter(

"colmun1".getBytes(), "name".getBytes(), CompareOp.EQUAL, "lillcol".getBytes());

list.addFilter(singleColumnValueExcludeFilter);

Scan scan = new Scan();

scan.setFilter(list);

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

String startRowKey = "18828394827" + (Long.MAX_VALUE - sdf.parse("2016010100000").getTime());

scan.setStartRow(startRowKey.getBytes());

String stopRowKey = "18828394827" + (Long.MAX_VALUE - sdf.parse("2016020100000").getTime());

scan.setStopRow(stopRowKey.getBytes());

ResultScanner scanner = hTable.getScanner(scan);

for (Result rs : scanner) {

System.out.println(new String(CellUtil.cloneValue(rs.getColumnLatestCell("colmun1".getBytes(),

"name".getBytes()))));

}

end();

}

8、获取某条数据

//获取某条数据


public void get() throws Exception {

begin();

// 手机号_时间戳

String rowKey = "133456789755_20170932438765";

Get get = new Get(rowKey.getBytes());

get.addColumn("column1".getBytes(), "name".getBytes());

get.addColumn("column1".getBytes(), "age".getBytes());

Result result = hTable.get(get);

KeyValue columnLatest = result.getColumnLatest("column".getBytes(), "name".getBytes());

System.out.println("----------" + new String(CellUtil.cloneValue(columnLatest)));

end();

}

9、main方法

public static void main(String[] args) throws Exception {


HbaseDemo hbaseDemo = new HbaseDemo();

System.out.println("create table main ");

hbaseDemo.createTable();

System.out.println("insert table main ");

hbaseDemo.insertDB();

}


10、完整源码

package cn.lillcol.sxt;import java.io.IOException;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.List;import java.util.Random;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.CellUtil;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.KeyValue;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.Get;import org.apache.hadoop.hbase.client.HBaseAdmin;import org.apache.hadoop.hbase.client.HTable;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.client.Result;import org.apache.hadoop.hbase.client.ResultScanner;import org.apache.hadoop.hbase.client.Scan;import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;import org.apache.hadoop.hbase.filter.FilterList;import org.apache.hadoop.hbase.filter.PrefixFilter;import org.apache.hadoop.hbase.filter.SingleColumnValueExcludeFilter;

public class HbaseDemo {  

  HBaseAdmin hBaseAdmin;  

  HTable hTable;  

 String TN = "lillcol"; 

   Random r = new Random(); 

   // 初始化

Configuration hBaseAdmin hTable    

public void begin() throws Exception {        

Configuration conf = new Configuration();    

//集群跑的时候不设置  本地需要设置   

 // conf.set("hbase.zookeeper.quorum", "node1.noce2.noce3");      

  hBaseAdmin = new HBaseAdmin(conf);      

  hTable = new HTable(conf, TN);  

  }  

  // 关闭hBaseAdmin hTable 资源 注意先判断是否为null   

 public void end() {        

if (hBaseAdmin != null) {   

         try {      

          hBaseAdmin.close();     

       } catch (IOException e) {      

          // TODO Auto-generated catch block              

  e.printStackTrace();      

      }   

     }    

   if (hTable != null) {       

     try {         

       hTable.close();           

 } catch (IOException e) {  

             // TODO Auto-generated catch block        

        e.printStackTrace();            }        }    }   

 // 创建一个新的Table    

public void createTable() throws Exception {   

     // 初始化      

  begin();       

 // 首先判断表存不存在 存在删除      

  if (hBaseAdmin.tableExists(TN)) {    

        hBaseAdmin.disableTable(TN);    

       hBaseAdmin.deleteTable(TN);    

    }     

   // 1.2以后的版本 好像不用 HTableDescriptor了    

    // 过段时间在更新1.2以后的版本     

   HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(TN));  

      // 创建列族     

   HColumnDescriptor family1 = new HColumnDescriptor("column1");   

     // 对表的一些设置    

    family1.setBlockCacheEnabled(true);   

     family1.setInMemory(true);    

    family1.setMaxVersions(2);       

// 添加列族    1.2版本好像不支持addFamily(方法了)

    desc.addFamily(family1);  

      hBaseAdmin.createTable(desc);  

      System.out.println("create table success"); 

       // 关闭资源   

     end();    }   

 public void insert() throws Exception {   

     begin(); 

       Listputs = new ArrayList(); 

       // 手机号_时间戳   

     String rowKey = "133456789755_20170932438765";  

     Put put = new Put(rowKey.getBytes());  

      put.add("column1".getBytes(), "name".getBytes(), "lillcol".getBytes());        put.add("column1".getBytes(), "age".getBytes(), "20".getBytes());  

      puts.add(put);  

      if (puts.size() > 10) {      

      hTable.put(puts); 

           puts.removeAll(puts);  

      }  

      end();

    }  

  //获取某条数据 

   public void get() throws Exception {    

    begin();  

      // 手机号_时间戳      

  String rowKey = "133456789755_20170932438765"; 

       Get get = new Get(rowKey.getBytes());  

      get.addColumn("column1".getBytes(), "name".getBytes());  

      get.addColumn("column1".getBytes(), "age".getBytes());  

      Result result = hTable.get(get); 

       KeyValue columnLatest = result.getColumnLatest("column".getBytes(), "name".getBytes()); 

       System.out.println("----------" + new String(CellUtil.cloneValue(columnLatest)));   

     end();  

  }

    // 获得手机号   

 public String getPhoneNum(String prefix) {    

    return prefix + String.format("%8d", r.nextInt(999999999));   

 }   

 //获得日期   

 public String getDate(String year) {    

    return year + String.format( "%02d%02d%02d%02d%02d", new Object[] { r.nextInt(12) + 1, r.nextInt(29) + 1, r.nextInt(60), r.nextInt(60),  r.nextInt(60) });  

  }  

  public void insertDB() throws Exception {    

    begin();   

   // 创建一个List缓存     

   Listputs = new ArrayList();

//为一个用户生成十条模拟数据

for (int i = 0; i < 10; i++) {

String rowKey;

String phoneNum = getPhoneNum("186");

for (int j = 0; j < 100; j++) {

String phoneData = getDate("2016");

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

try {

long dataLong = sdf.parse(phoneData).getTime();

rowKey = phoneNum + (Long.MAX_VALUE - dataLong);

// System.out.println(rowKey);

Put put = new Put(rowKey.getBytes());

put.add("column1".getBytes(), "name".getBytes(), "lillcol".getBytes());

//将入list缓存

puts.add(put);

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//批量添加数据

hTable.put(puts);

end();

}

//查询数据

public void scandDB() throws Exception {

begin();

Scan scan = new Scan();

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

//设置开始rowKey  和结束rowKey

String startRowKey = "18828394827" + (Long.MAX_VALUE - sdf.parse("2016010100000").getTime());

scan.setStartRow(startRowKey.getBytes());

String stopRowKey = "18828394827" + (Long.MAX_VALUE - sdf.parse("2016020100000").getTime());

scan.setStopRow(stopRowKey.getBytes());

ResultScanner scanner = hTable.getScanner(scan);

for (Result rs : scanner) {

//rs.getColumnLatestCell("colmun1".getBytes(), "name".getBytes())) 获取到的数据需要经过CellUtil.cloneValue在转换成String

System.out.println(new String(CellUtil.cloneValue(rs.getColumnLatestCell("colmun1".getBytes(),

"name".getBytes()))));

}

end();

}

//带过滤器的查询

public void scandDB2() throws Exception {

begin();

FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ALL);

PrefixFilter prefixFilter = new PrefixFilter("18827385967".getBytes());

list.addFilter(prefixFilter);

SingleColumnValueExcludeFilter singleColumnValueExcludeFilter = new SingleColumnValueExcludeFilter(

"colmun1".getBytes(), "name".getBytes(), CompareOp.EQUAL, "lillcol".getBytes());

list.addFilter(singleColumnValueExcludeFilter);

Scan scan = new Scan();

scan.setFilter(list);

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

String startRowKey = "18828394827" + (Long.MAX_VALUE - sdf.parse("2016010100000").getTime());

scan.setStartRow(startRowKey.getBytes());

String stopRowKey = "18828394827" + (Long.MAX_VALUE - sdf.parse("2016020100000").getTime());

scan.setStopRow(stopRowKey.getBytes());

ResultScanner scanner = hTable.getScanner(scan);

for (Result rs : scanner) {

System.out.println(new String(CellUtil.cloneValue(rs.getColumnLatestCell("colmun1".getBytes(),

"name".getBytes()))));

}

end();

}

public static void main(String[] args) throws Exception {

HbaseDemo hbaseDemo = new HbaseDemo();

System.out.println("create table main ");

hbaseDemo.createTable();

System.out.println("insert table main ");

hbaseDemo.insertDB();

}

}


11、总结

由于刚接触hbase不久 所以如果文中内容有错误的话 欢迎指出  谢谢

此外 此文主要是本人学习hbase过程中参考尚学堂教程的一些总结!!

你可能感兴趣的:(通过Java 操作Hbase)