码迷,mamicode.com
首页 > 编程语言 > 详细

habse java api使用操作

时间:2015-10-14 20:09:13      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:

上一篇cm5.4和cdh5.4安装(http://my.oschina.net/penngo/blog/517223),本文使用HBase的java客户端api操作Hbase。

需要用到的包可以在/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/jars找到,hbase版本1.0.0

技术分享

HbaseTest3.java代码例子

import java.io.IOException;
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.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
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.HBaseAdmin;
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.BinaryPrefixComparator;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.filter.ValueFilter;
import org.apache.hadoop.hbase.util.Bytes;

public class HbaseTest3 {
	private Connection connection = null;

	public HbaseTest3() {

	}

	public void createTable(String tableName) {
		try {
			System.out.println("start create table ......");
			Connection con = this.getConnection();
			HBaseAdmin hBaseAdmin = (HBaseAdmin) con.getAdmin();
			if (hBaseAdmin.tableExists(tableName)) {// 如果存在要创建的表,那么先删除,再创建
				hBaseAdmin.disableTable(tableName);
				hBaseAdmin.deleteTable(tableName);
				System.out.println(tableName + " is exist,detele....");
			}

			HTableDescriptor tableDescriptor = new HTableDescriptor(
					TableName.valueOf(tableName));
			tableDescriptor.addFamily(new HColumnDescriptor("column1"));
			tableDescriptor.addFamily(new HColumnDescriptor("column2"));
			tableDescriptor.addFamily(new HColumnDescriptor("column3"));
			hBaseAdmin.createTable(tableDescriptor);
			System.out.println("create table success......");
		} catch (MasterNotRunningException e) {
			e.printStackTrace();
		} catch (ZooKeeperConnectionException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void insertData(String tableName) {
		System.out.println("start insert data ......");

		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			// HTablePool pool = new HTablePool(configuration, 1000);
			// HTable table = (HTable) pool.getTable(tableName);
			Put put = new Put("112233bbbcccc".getBytes());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的ROWKEY,此处rowkey为put构造方法中传入的值
			put.addColumn("column1".getBytes(), null, "aaa2".getBytes());// 本行数据的第一列
			put.addColumn("column2".getBytes(), null, "bbb2".getBytes());// 本行数据的第三列
			put.addColumn("column3".getBytes(), null, "ccc2".getBytes());// 本行数据的第三列
			table.put(put);
			// pool.getTable(tableName).put(put);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("end insert data ......");
	}

	public void queryAll(String tableName) {
		// HTablePool pool = new HTablePool(configuration, 1000);
		// HTable table = (HTable) pool.getTable(tableName);
		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			ResultScanner rs = table.getScanner(new Scan());
			for (Result r : rs) {
				System.out.println("获得到rowkey:" + new String(r.getRow()));
				for (KeyValue keyValue : r.raw()) {
					System.out.println("列:" + new String(keyValue.getFamily())
							+ "====值:" + new String(keyValue.getValue()));
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void queryByCondition1(String tableName) {

		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			Get scan = new Get("112233bbbcccc".getBytes());// 根据rowkey查询
			Result r = table.get(scan);
			System.out.println("获得到rowkey:" + new String(r.getRow()));
			for (KeyValue keyValue : r.raw()) {
				System.out.println("列:" + new String(keyValue.getFamily())
						+ "====值:" + new String(keyValue.getValue()));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void queryByCondition2(String tableName) {

		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			Filter filter = new SingleColumnValueFilter(
					Bytes.toBytes("column1"), null, CompareOp.EQUAL,
					Bytes.toBytes("aaa2")); // 当列column1的值为aaa时进行查询
			Scan s = new Scan();
			s.setFilter(filter);
			ResultScanner rs = table.getScanner(s);
			for (Result r : rs) {
				System.out.println("获得到rowkey:" + new String(r.getRow()));
				for (KeyValue keyValue : r.raw()) {
					System.out.println("列:" + new String(keyValue.getFamily())
							+ "====值:" + new String(keyValue.getValue()));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void queryByCondition3(String tableName) {
		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
//			提取rowkey以cccc结尾数据
//			Filter filter1 = new RowFilter(CompareOp.EQUAL,new RegexStringComparator(".*cccc$"));
//
//			提取rowkey以包含bbb的数据
//			Filter filter1 = new RowFilter(CompareOp.EQUAL,new SubstringComparator("bbb"));

//			提取rowkey以123开头的数据
			Filter filter1 = new RowFilter(CompareOp.EQUAL,new BinaryPrefixComparator("1122".getBytes()));

//			Filter filter1 = new RowFilter(CompareOp.EQUAL,
//					new BinaryComparator(Bytes.toBytes(rowkey)));

			Scan scan = new Scan();
			scan.setFilter(filter1);

			ResultScanner rs = table.getScanner(scan);
			for (Result r : rs) {
				System.out.println("获得到rowkey:" + new String(r.getRow()));
				for (Cell cell : r.rawCells()) {
					System.out.println("列:"
							+ new String(CellUtil.cloneFamily(cell)) + "====值:"
							+ new String(CellUtil.cloneValue(cell)));
				}
			}
			rs.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void queryByCondition4(String tableName) {
		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			Filter filter1 = new ValueFilter(CompareOp.EQUAL,
					new SubstringComparator("aaa2"));
			Scan scan = new Scan();
			scan.setFilter(filter1);

			ResultScanner rs = table.getScanner(scan);
			for (Result r : rs) {
				System.out.println("获得到rowkey:" + new String(r.getRow()));
				for (Cell cell : r.rawCells()) {
					System.out.println("列:"
							+ new String(CellUtil.cloneFamily(cell)) + "====值:"
							+ new String(CellUtil.cloneValue(cell)));
				}
			}
			rs.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void close() throws IOException {
		if (connection != null) {
			connection.close();
		}
	}

	public Connection getConnection() throws IOException {
		Configuration configuration = HBaseConfiguration.create();
		configuration.set("hbase.zookeeper.property.clientPort", "2181");
		configuration.set("hbase.zookeeper.quorum", "192.168.17.108");
		if (connection == null) {
			connection = ConnectionFactory.createConnection(configuration);
		}
		return connection;
	}

	public static void main(String[] args) {
		HbaseTest3 hbaseTest = new HbaseTest3();
		try {
			String tableName = "test1";
			 hbaseTest.createTable("test1");
			 hbaseTest.insertData("test1");
			 hbaseTest.queryAll("test1");
			// hbaseTest.queryByCondition1(tableName);
//			 hbaseTest.queryByCondition2(tableName);
//			hbaseTest.queryByCondition3(tableName);
//			hbaseTest.queryByCondition4(tableName);
			hbaseTest.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


运行结果:

技术分享

habse java api使用操作

标签:

原文地址:http://my.oschina.net/penngo/blog/517228

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!