欢迎投稿

今日深度:

hbase的常用操作,

hbase的常用操作,


package com.wangl.hadoop.hbase;

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

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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.BinaryComparator;
import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
import org.apache.hadoop.hbase.filter.ByteArrayComparable;
import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FamilyFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.filter.QualifierFilter;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Before;
import org.junit.Test;

public class HBaseUtils {
	private static Configuration conf = null;
	
	@Before
	public void init(){
		conf = HBaseConfiguration.create();
	}
	/**
	 * 删除指定表
	 * @param tablename	表名
	 * @throws Exception
	 */
	@Test
	public void testDrop(String tablename) throws Exception{
	    //old api
// 		@SuppressWarnings("deprecation")
// 		HBaseAdmin admin = new HBaseAdmin(conf);API
        //new API
		Connection connection = ConnectionFactory.createConnection(conf);
		HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
		admin.disableTable(tablename);
		admin.deleteTable(tablename);
		admin.close();
	}
	/**
	 * 想制定表中指定列族指定列插入数据
	 * @param tablename	表名
	 * @param columnFamily	列族
	 * @param rk	行键
	 * @param columnName	列名
	 * @param value	值
	 * @throws Exception
	 */
	@Test
	public void testPut(String tablename, String columnFamily, String rk, String columnName, String value) throws Exception{
		if(tablename != null && columnFamily != null && rk != null && columnName != null && value != null){
			@SuppressWarnings("deprecation")
			HTable table = new HTable(conf, tablename);
			Put put1 = new Put(Bytes.toBytes(rk));
			put1.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnName), Bytes.toBytes(value));
			List puts = new ArrayList();
			table.put(puts);
			table.close();
		}
	}
	/**
	 * 得到指定表中指定列族下指定列的值
	 * @param tablename
	 * @param columnFamily
	 * @param rk
	 * @param columnName
	 * @throws Exception
	 */
	@Test
	public void testGet(String tablename, String columnFamily, String rk, String columnName) throws Exception{
		if(tablename != null && columnFamily != null && rk != null && columnName != null){
			@SuppressWarnings("deprecation")
			HTable table = new HTable(conf, tablename);
			Get get = new Get(rk.getBytes());
			get.setMaxVersions(5);
			Result result = table.get(get);
//			List cells = result.listCells();
//			for(Cell c:cells){
//				System.out.println(new String(c.getFamilyArray()));
//				System.out.println(new String(c.getQualifierArray()));
//				System.out.println(new String(c.getValueArray()));
//			}
			result.getValue(columnFamily.getBytes(), columnName.getBytes());
			table.close();
		}
	}
	
	@Test
	public void testScan(String tablename, String startRk, String endRk) throws Exception{
		@SuppressWarnings("deprecation")
		HTable table = new HTable(conf, tablename);
		Scan scan = new Scan(startRk.getBytes(),endRk.getBytes());
		//前缀过滤器---针对的是行键
		Filter filter = new PrefixFilter("rk".getBytes());
		//行过滤器
		ByteArrayComparable rowComparator = new BinaryComparator("person_rk_0001".getBytes());
		RowFilter rf = new RowFilter(CompareOp.LESS_OR_EQUAL, rowComparator);
		/**
		 * 假设rk 的格式为 :创建日期_发布日期_ID_TITLE
		 * 目标:查找 	发布日期:“2016_10_27”的数据
		 */
		rf = new RowFilter(CompareOp.EQUAL, new SubstringComparator("_2016_10_27_"));
		//单值匹配过滤器1		完整匹配字节数组
		new SingleColumnValueFilter("base_info".getBytes(), "name".getBytes(), CompareOp.EQUAL, "wangl".getBytes());
		//单值匹配过滤器2	匹配正则表达式
		ByteArrayComparable comparator = new RegexStringComparator("zhan.*");
		new SingleColumnValueFilter("base_info".getBytes(), "name".getBytes(), CompareOp.EQUAL, comparator);
		//单值匹配过滤器3	匹配是否包含给定字符,大小写不敏感
		comparator = new SubstringComparator("wu");
		new SingleColumnValueFilter("base_info".getBytes(), "name".getBytes(), CompareOp.EQUAL, comparator);
		//键值对元数据过滤------family过滤------字节数组完整匹配
		FamilyFilter ff = new FamilyFilter(CompareOp.EQUAL, new BinaryComparator("base_info".getBytes()));
		//键值对元数据过滤-----family过滤----字节数组前缀匹配	如果表中有inf开头的列族,过滤结果为该列族的所有行
		ff = new FamilyFilter(CompareOp.EQUAL, new BinaryPrefixComparator("inf".getBytes()));
		//键值对元数据过滤------family过滤------字节数组完整匹配
		QualifierFilter qf = new QualifierFilter(CompareOp.EQUAL, new BinaryComparator("name".getBytes()));
		//键值对元数据过滤-----family过滤----字节数组前缀匹配	如果表中有name开头的列,过滤结果为所有行该列的数据
		qf = new QualifierFilter(CompareOp.EQUAL, new BinaryPrefixComparator("name".getBytes()));
		
		//基于列名(即Qualifier)前缀过滤数据的ColumnPrefixFilter
        filter = new ColumnPrefixFilter("na".getBytes());
        
        scan.setFilter(filter);
		
		ResultScanner rs = table.getScanner(scan);
		for(Result r:rs){
			String value = new String(r.getValue("base_info".getBytes(), "name".getBytes()));
			System.out.println(value);
		}
		
		table.close();
	}
	/**
	 * 删除指定表中指定行,指定列族,指定列
	 * @param tableName
	 * @param rk
	 * @param columnName
	 * @param familyName
	 * @throws Exception
	 */
	@Test
	public void testDel(String tableName, String rk, String columnName,String familyName) throws Exception{
		@SuppressWarnings("deprecation")
		HTable table = new HTable(conf, tableName);
		Delete del = new Delete(rk.getBytes());
		del.addColumn(familyName.getBytes(), columnName.getBytes());
		table.delete(del);
		table.close();
	}
}

www.htsjk.Com true http://www.htsjk.com/hbase/41961.html NewsArticle hbase的常用操作, package com.wangl.hadoop.hbase;import java.util.ArrayList;import java.util.List;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.client.Dele...
相关文章
    暂无相关文章
评论暂时关闭