HBASE API操作(增删改查一)

package com.sheng.cuid;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
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.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionConfiguration;
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.BinaryComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.util.Bytes;

public class TestHbase {

	static Configuration cfg = HBaseConfiguration.create();

	public static void main(String[] args) {

		try {
			// listTables();
			//create("emp");
			// get();
			// findAll();
			//findFilter();
			//listTables();
			putRows();
			

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

	public static void listTables() throws IOException {

		Connection conn = ConnectionFactory.createConnection(cfg);
		Admin admin = conn.getAdmin();
		TableName[] tableNames = admin.listTableNames(); // Alt+shift+L
		for (TableName name : tableNames) {
			System.out.println(name.getNameAsString());
		}
		conn.close();

	}

	// 创建表
	public static void create(String tableName) throws IOException {
		// String tableName = "emp";

		Connection conn = ConnectionFactory.createConnection(cfg);

		Admin admin = conn.getAdmin();
		TableName tn = TableName.valueOf(tableName); // 构建了一个HBase的表名对像
		if (admin.tableExists(tn)) // 判断表是否成在
		{
			admin.disableTable(tn); // 禁用表
			admin.deleteTable(tn); // 删除表

		}
		// create 'tableName','cf1'

		HTableDescriptor tableDesc = new HTableDescriptor(tn); // 构建一个HBase表结构信息
		HColumnDescriptor columnDesc1 = new HColumnDescriptor("cf1"); // 构建一个列族
		columnDesc1.setVersions(1, 5); // 版本数
		HColumnDescriptor columnDesc2 = new HColumnDescriptor("cf2"); // 构建一个列族
		columnDesc2.setVersions(1, 5);
		tableDesc.addFamily(columnDesc1);// 添加到描述中
		tableDesc.addFamily(columnDesc2);// 添加到描述中
		admin.createTable(tableDesc); // 创建一个表指定描述的表
		conn.close();
		System.out.println("创建表成功!!");

	}

	// 查询指定rowkey的一条记录

	public static void get() throws IOException {

		// Admin admin = conn.getAdmin();

		Connection conn = ConnectionFactory.createConnection(cfg);

		TableName tn = TableName.valueOf("students2"); // 构建了一个HBase的表对像
		Table table = conn.getTable(tn);// 从集群中拿到该表

		Get get = new Get("00002".getBytes()); // 查找指定的RowKey
		Result resulst = table.get(get);

		List<Cell> cells = resulst.listCells(); // 得到所有单元格
		for (Cell c : cells) {
			// 得到RowKey
			System.out.print(new String(c.getRowArray(), c.getRowOffset(), c.getRowLength()) + "\t");
			// 得到列族名
			System.out.print(new String(c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength()) + "\t");
			// 得到列名
			System.out.print(new String(c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength()) + "\t");
			// 得到值
			System.out.println(new String(c.getValueArray(), c.getValueOffset(), c.getValueLength()));

		}

	}

	// 查找整个表
	public static void findAll() throws IOException {
		TableName tableName = TableName.valueOf("students2");// 指定表名

		Connection conn = ConnectionFactory.createConnection(cfg);

		Table table = conn.getTable(tableName); // 得到表

		Scan scan = new Scan();
		// Scan scan = new Scan(Bytes.toBytes("r"), Bytes.toBytes("00005"));// 扫描从里开始到那里结束
		ResultScanner rs = table.getScanner(scan);
		Iterator<Result> iter = rs.iterator();
		while (iter.hasNext()) {
			Result resulst = iter.next();// 取一条记录
			List<Cell> cells = resulst.listCells(); // 得到所有单元格
			for (Cell c : cells) {
				// 得到RowKey
				System.out.print(new String(c.getRowArray(), c.getRowOffset(), c.getRowLength()) + "\t");
				// 得到列族名
				System.out.print(new String(c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength()) + "\t");
				// 得到列名
				System.out.print(
						new String(c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength()) + "\t");
				// 得到值
				System.out.println(new String(c.getValueArray(), c.getValueOffset(), c.getValueLength()));

			}

		}

	}
	//指定查询
	public static void findFilter() throws IOException {

		TableName tableName = TableName.valueOf("students2");// 指定表名
		Connection conn = ConnectionFactory.createConnection(cfg);
		Table table = conn.getTable(tableName); // 得到表
		RowFilter rowFilter = new RowFilter(CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("00002")));// 小于等于00005
		// RowFilter rowFilter2 = new RowFilter(CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("00005")));// 小于等于00005
		Scan scan = new Scan();
		scan.setFilter(rowFilter);// 设置行过滤条件
		// scan.setFilter(new FilterList(rowFilter,rowFilter2));//设置多个过滤器操作

		ResultScanner rs = table.getScanner(scan);
		Iterator<Result> iter = rs.iterator();
		while (iter.hasNext()) {
			Result resulst = iter.next();
			List<Cell> cells = resulst.listCells(); // 得到所有单元格
			for (Cell c : cells) {
				// 得到RowKey
				System.out.print(new String(c.getRowArray(), c.getRowOffset(), c.getRowLength()) + "\t");
				// 得到列族名
				System.out.print(new String(c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength()) + "\t");
				// 得到列名
				System.out.print(
						new String(c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength()) + "\t");
				// 得到值
				System.out.println(new String(c.getValueArray(), c.getValueOffset(), c.getValueLength()));

			}

		}
	}

	// 批量添加记录
	public static void putRows() throws IOException {
		String rowinfos[] = { "rowkey=row000001	name=李刚1	sex=MAN	age=20	oracle=95.4",
				"rowkey=row000002	name=李刚2	sex=MAN	age=20	oracle=95.4",
				"rowkey=row000003	name=李刚3	sex=MAN	age=20	oracle=95.4",
				"rowkey=row000004	name=李刚4	sex=MAN	age=20	oracle=95.4",
				"rowkey=row000005	name=李刚5	sex=MAN	age=20	oracle=95.4",
				"rowkey=row000006	name=李刚6	sex=MAN	age=20	oracle=95.4",
				"rowkey=row000007	name=李刚7	sex=MAN	age=20	oracle=95.4" };

		Connection conn = ConnectionFactory.createConnection(cfg);

		TableName tn = TableName.valueOf("teacher"); // 构建了一个HBase的表对像
		Table table = conn.getTable(tn);// 从集群中拿到该表

		List<Put> puts = new ArrayList<Put>();

		for (String rowinfo : rowinfos) {
			String[] rows = rowinfo.split("\t");

			Put put = new Put(rows[0].split("=")[1].getBytes()); // 以RowKey来构造一个Put对像

			for (int i = 1; i < rows.length; i++) {
				String[] column = rows[i].split("=");
				// put.addColumn("列族名", "列名(字段名)", "值");
				if (i > 2) {
					put.addColumn("soures".getBytes(), column[0].getBytes(), column[1].getBytes()); // 给put对像添加列信息数据
				} else {
					put.addColumn("info".getBytes(), column[0].getBytes(), column[1].getBytes()); // 给put对像添加列信息数据
				}
			}

			puts.add(put);// 把封装好一个put添加到List

		}

		table.put(puts); // 批量添加

		System.out.println("添加数据成功");

	}

}

发布了133 篇原创文章 · 获赞 53 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43599377/article/details/103588645