Hbase 1.1.4版本表操作例子

最近测试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.csdn.net/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.csdn.net/cnweike/article/details/42920547

猜你喜欢

转载自bobboy007.iteye.com/blog/2289537