转: Hbase新的api的增删改查的工具类

写了个Hbase新的api的增删改查的工具类,以供参考,直接拷贝代码就能用,散仙觉得基础的功能,都有了,代码如下: 
  package com.dhgate.hbase.test; 

import java.util.ArrayList; 
import java.util.List; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.hbase.Cell; 
import org.apache.hadoop.hbase.CellUtil; 
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.Delete; 
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.PageFilter; 
import org.apache.hadoop.hbase.filter.PrefixFilter; 
import org.apache.hadoop.hbase.util.Bytes; 

/** 
* 基于新的API 
* Hbase0.96版本 
* 写的工具类 

* @author qindongliang 
* 大数据技术交流群: 376932160 

* **/ 
public class HbaseCommons { 

static Configuration conf=HBaseConfiguration.create(); 
static String tableName=""; 

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

//String tableName="test"; 
//createTable(tableName, null); 



/** 
* 批量添加数据 
* @param tableName 标名字 
* @param rows rowkey行健的集合 
* 本方法仅作示例,其他的内容需要看自己义务改变 

* **/ 
public static void insertList(String tableName,String rows[])throws Exception{ 
HTable table=new HTable(conf, tableName); 
List<Put> list=new ArrayList<Put>(); 
for(String r:rows){ 
Put p=new Put(Bytes.toBytes(r)); 
//此处示例添加其他信息 
//p.add(Bytes.toBytes("family"),Bytes.toBytes("column"), 1000, Bytes.toBytes("value")); 
list.add(p); 

table.put(list);//批量添加 
table.close();//释放资源 


/** 
* 创建一个表 
* @param tableName 表名字 
* @param columnFamilys 列簇 

* **/ 
public static void createTable(String tableName,String[] columnFamilys)throws Exception{ 
//admin 对象 
HBaseAdmin admin=new HBaseAdmin(conf); 
if(admin.tableExists(tableName)){ 
System.out.println("此表,已存在。"); 
}else{ 
//旧的写法 
//HTableDescriptor tableDesc=new HTableDescriptor(tableName); 
//新的api 
HTableDescriptor tableDesc=new HTableDescriptor(TableName.valueOf(tableName)); 

for(String columnFamily:columnFamilys){ 
tableDesc.addFamily(new HColumnDescriptor(columnFamily)); 


admin.createTable(tableDesc); 
System.out.println("建表成功!"); 


admin.close();//关闭释放资源 



/** 
* 删除一个表 
* @param tableName 删除的表名 
* */ 
public static void deleteTable(String tableName)throws Exception{ 
HBaseAdmin admin=new HBaseAdmin(conf); 
if(admin.tableExists(tableName)){ 
admin.disableTable(tableName);//禁用表 
admin.deleteTable(tableName);//删除表 
System.out.println("删除表成功!"); 
}else{ 
System.out.println("删除的表不存在。"); 

admin.close(); 


/** 
* 插入一条数据 
* @param tableName 表明 
* @param columnFamily 列簇 
* @param column 列 
* @param value 值 

* ***/ 
public static void insertOneRow(String tableName,String rowkey,String columnFamily,String column,String value)throws Exception{ 

HTable table=new HTable(conf, tableName); 
Put put=new Put(Bytes.toBytes(rowkey)); 
put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value)); 
table.put(put);//放入表 
table.close();//释放资源 



/** 
* 删除一条数据 
* @param tableName 表名 
* @param row rowkey行键 

* */ 
public static void deleteOneRow(String tableName,String row)throws Exception{ 

HTable table=new HTable(conf, tableName); 
Delete delete=new Delete(Bytes.toBytes(row)); 
table.delete(delete); 
table.close(); 


/** 
* 删除多条数据 
* @param tableName 表名 
* @param rows 行健集合 

* **/ 
public static void deleteList(String tableName,String rows[])throws Exception{ 
HTable table=new HTable(conf, tableName); 
List<Delete> list=new ArrayList<Delete>(); 
for(String row:rows){ 
Delete del=new Delete(Bytes.toBytes(row)); 
list.add(del); 

table.delete(list); 
table.close();//释放资源 



/** 
* 获取一条数据,根据rowkey 
* @param tableName 表名 
* @param row 行健 

* **/ 
public static void getOneRow(String tableName,String row)throws Exception{ 
HTable table=new HTable(conf, tableName); 
Get get=new Get(Bytes.toBytes(row)); 
Result result=table.get(get); 
printRecoder(result);//打印记录 
table.close();//释放资源 


/** 
* 查看某个表下的所有数据 

* @param tableName 表名 
* */ 
public static void showAll(String tableName)throws Exception{ 
HTable table=new HTable(conf, tableName); 
Scan scan=new Scan(); 
ResultScanner rs=table.getScanner(scan); 
for(Result r:rs){ 
printRecoder(r);//打印记录 

table.close();//释放资源 


/** 
* 查看某个表下的所有数据 

* @param tableName 表名 
* @param rowKey 行健 
* */ 
public static void ScanPrefixByRowKey(String tableName,String rowKey)throws Exception{ 
HTable table=new HTable(conf, tableName); 
Scan scan=new Scan(); 
scan.setFilter(new PrefixFilter(Bytes.toBytes(rowKey))); 
ResultScanner rs=table.getScanner(scan); 
for(Result r:rs){ 
printRecoder(r);//打印记录 

table.close();//释放资源 


/** 
* 查看某个表下的所有数据 

* @param tableName 表名 
* @param rowKey 行健扫描 
* @param limit 限制返回数据量 
* */ 
public static void ScanPrefixByRowKeyAndLimit(String tableName,String rowKey,long limit)throws Exception{ 
HTable table=new HTable(conf, tableName); 
Scan scan=new Scan(); 
scan.setFilter(new PrefixFilter(Bytes.toBytes(rowKey))); 
scan.setFilter(new PageFilter(limit)); 
ResultScanner rs=table.getScanner(scan); 
for(Result r:rs){ 
printRecoder(r);//打印记录 

table.close();//释放资源 


/** 
* 根据rowkey扫描一段范围 
* @param tableName 表名 
* @param startRow 开始的行健 
* @param stopRow 结束的行健 
* **/ 
public void scanByStartAndStopRow(String tableName,String startRow,String stopRow)throws Exception{ 
HTable table=new HTable(conf, tableName); 
Scan scan=new Scan(); 
scan.setStartRow(Bytes.toBytes(startRow)); 
scan.setStopRow(Bytes.toBytes(stopRow)); 
ResultScanner rs=table.getScanner(scan); 
for(Result r:rs){ 
printRecoder(r); 

table.close();//释放资源 


/** 
* 扫描整个表里面具体的某个字段的值 
* @param tableName 表名 
* @param columnFalimy 列簇 
* @param column 列 
* **/ 
public static void getValueDetail(String tableName,String columnFalimy,String column)throws Exception{ 

HTable table=new HTable(conf, tableName); 
Scan scan=new Scan(); 
ResultScanner rs=table.getScanner(scan); 
for(Result r:rs){ 
System.out.println("值: " +new String(r.getValue(Bytes.toBytes(columnFalimy), Bytes.toBytes(column)))); 

table.close();//释放资源 



/** 
* 打印一条记录的详情 

* */ 
public static void printRecoder(Result result)throws Exception{ 
for(Cell cell:result.rawCells()){ 
System.out.print("行健: "+new String(CellUtil.cloneRow(cell))); 
System.out.print("列簇: "+new String(CellUtil.cloneFamily(cell))); 
System.out.print(" 列: "+new String(CellUtil.cloneQualifier(cell))); 
System.out.print(" 值: "+new String(CellUtil.cloneValue(cell))); 
System.out.println("时间戳: "+cell.getTimestamp()); 



}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值