最近测试Hbase相关操作,发现网上例子都是到处复制,而且是旧版本的,在hbase1.x后很多函数,已经废弃或删除。下边是用新版hbase 测试的例子,供大家参考.
环境:
Hadoop2.5
hbase 1.1.4
package jyw.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
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.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
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.client.Table;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.BinaryComparator;
public class HBaseTableNewFunc {
private static Connection conn=null;
private static Configuration conf=null;
public static synchronized void getConnect() throws IOException
{
conf=HBaseConfiguration.create();
conn =ConnectionFactory.createConnection(conf);
// return conn;
}
public static void createTable(String tableName,String famName) throws IOException
{
Admin admin= conn.getAdmin();
if (admin.tableExists(TableName.valueOf(tableName))) {
System.out.println("table Exists!");
// System.exit(0);
}
else{
HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName));
tableDesc.addFamily(new HColumnDescriptor(famName));
admin.createTable(tableDesc);
System.out.println("create table success!");
}
}
public static void addRow(String tableName,String rowKey, String columnFamily, Map<String,String> colmap)
throws Exception
{
Iterator<Map.Entry<String, String>> iterator = colmap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> entry = iterator.next();
String colname = entry.getKey();
String colval = entry.getValue();
addRowKeyValue(tableName,rowKey,columnFamily,colname, colval);
}
}
public static Map<String,String> getRow(String tableName, String rowKey) throws IOException
{
Map<String,String> colmap = new HashMap<String, String>();
Table table = conn.getTable(TableName.valueOf(tableName));
Get g=new Get(Bytes.toBytes(rowKey));
Result result=table.get(g);
List<Cell> cells = result.listCells();
for (Cell c : cells){
colmap.put(Bytes.toString(CellUtil.cloneQualifier(c)),Bytes.toString(CellUtil.cloneValue(c)));
}
table.close();
return colmap;
}
/*
* 获得指定字段
* */
public static Map<String,String> getRow(String tableName, String rowKey,String family, List<String> fields)
throws IOException
{
Map<String,String> colmap = new HashMap<String, String>();
Table table = conn.getTable(TableName.valueOf(tableName));
Get g=new Get(Bytes.toBytes(rowKey));
Result result=table.get(g);
for(String colname :fields){
colmap.put(colname,Bytes.toString(result.getValue(Bytes.toBytes(family), Bytes.toBytes(colname))));
}
table.close();
return colmap;
}
/*
* http://blog.youkuaiyun.com/cnweike/article/details/42920547
* */
public static Map<String,Map<String,String>> getListByFilter(String tableName, String rowprefix)
throws IOException
{
Map<String,Map<String,String>> resultmap = new HashMap<String, Map<String,String>>();
Scan scan1 = new Scan();
Table table = conn.getTable(TableName.valueOf(tableName));
// Filter rowrf = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(rowprefix)));
PrefixFilter rowrf = new PrefixFilter(Bytes.toBytes(rowprefix));
List<Filter> filters = new ArrayList<Filter>();
filters.add(rowrf);
FilterList flist = new FilterList(FilterList.Operator.MUST_PASS_ALL, filters);
scan1.
// setStartRow(Bytes.toBytes("row1")).
//setStopRow(Bytes.toBytes("row3")).
setFilter(flist);
ResultScanner scanner1 = table.getScanner(scan1);
for(Result res : scanner1){
Map<String,String> colmap = new HashMap<String,String>();
String rowkey =null;
for(Cell cell : res.rawCells()){
rowkey = Bytes.toString(CellUtil.cloneRow(cell));
colmap.put(Bytes.toString(CellUtil.cloneQualifier(cell)),Bytes.toString(CellUtil.cloneValue(cell)));
}
resultmap.put(rowkey, colmap);
}
scanner1.close();
table.close();
return resultmap;
}
//scan
//delete
/*
* tablename 表名
* rowkey 行键
* columnFamily 列族名
* column 列名
* value 值
* */
public static void addRowKeyValue(String tableName, String rowKey,
String columnFamily, String column, String value) throws Exception {
Table table = conn.getTable(TableName.valueOf(tableName));
Put put = new Put(Bytes.toBytes(rowKey));// 指定行
// 参数分别:列族、列、值
put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
table.put(put);
}
public static void main (String [] agrs) {
String tablename="jyw_testnew";
String fam = "userinfo";
try{
System.out.println(" start connect hbase");
getConnect();
System.out.println(" start create table:"+tablename);
createTable(tablename,fam);
System.out.println(" start insert data: rowkey=j1 uname=jiayongwei password=abcdefg");
Map<String,String> rowmap = new HashMap<String,String>();
rowmap.put("uname", "jiayongwei");
rowmap.put("password", "abcdefg");
rowmap.put("age", "19");
addRow(tablename,"j1",fam,rowmap);
//插入数据
System.out.println(" start insert data: rowkey=j2 uname=jiayongwei2 password=abcdefg2");
rowmap.clear();
rowmap.put("uname", "jiayongwei2");
rowmap.put("password", "abcdefg2");
addRow(tablename,"j2",fam,rowmap);
System.out.println(" start insert data: rowkey=j22 uname=jiayongwei2 password=abcdefg2");
rowmap.clear();
rowmap.put("uname", "jiayongwei22");
rowmap.put("password", "abcdefg22");
addRow(tablename,"j22",fam,rowmap);
// 按 key 获得整行数据
System.out.println(" get by key return one row all columns rowkey=j1");
Map<String,String> result=getRow(tablename,"j1");
System.out.println("data:"+result);
//按key获取指定字段
System.out.println(" get by key return set columns rowkey=j1, filed: password");
List<String> columns = new ArrayList<String>();
columns.add("password");
Map<String,String> result1=getRow(tablename, "j1", fam, columns);
System.out.println(result1);
//过滤器
System.out.println("get data by row filter j2");
Map<String,Map<String,String>> mulresult= getListByFilter(tablename, "j2");
System.out.println("data List:"+mulresult);
}catch(Exception e){
e.printStackTrace();
}
}
}
内置过滤器参考博客:http://blog.youkuaiyun.com/cnweike/article/details/42920547