Hbase的Api操作

public class TestHbaseConnect {
	static HBaseAdmin admin = null;
	static Connection conn = null;

	public static void create_namespace() throws IOException {
		//
		Builder ns = NamespaceDescriptor.create("test_api_1901");
		NamespaceDescriptor build = ns.build();
		admin.createNamespace(build);
	}

	public static void main(String[] args) throws IOException {
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);

		// DDL操作
		// 获取ddl的句柄
		admin = (HBaseAdmin) conn.getAdmin();
		// create_namespace();

		admin.deleteNamespace("test_api");
		NamespaceDescriptor[] lists = admin.listNamespaceDescriptors();
		for (NamespaceDescriptor namespaceDescriptor : lists) {
			String name = namespaceDescriptor.getName();
			System.out.println(name);
		}

	}

	@Test
	public void test1() throws IOException {
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);

		// DDL操作
		// 获取ddl的句柄
		admin = (HBaseAdmin) conn.getAdmin();
		TableName[] listTableNames = admin.listTableNames();
		for (TableName tableName : listTableNames) {
			String nameWithNamespaceInclAsString = tableName.getNameWithNamespaceInclAsString();
			System.out.println(nameWithNamespaceInclAsString+"*");
		}
		NamespaceDescriptor[] lists = admin.listNamespaceDescriptors();
		for (NamespaceDescriptor namespaceDescriptor : lists) {
			String name = namespaceDescriptor.getName();
			System.out.println(name);
		}
	}

	// 创建表
	@Test
	public void test2() throws IOException {

		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);

		// DDL操作
		// 获取ddl的句柄
		admin = (HBaseAdmin) conn.getAdmin();
		// 创建表 先封装表名 再封装表名描述
		TableName name = TableName.valueOf("test_api");
		// 判断锁创建的表是否存在
		if (admin.tableExists(name)) {
			System.out.println("表名已经存在请更换名字");
		} else {
			HTableDescriptor hd = new HTableDescriptor(name);
			// 创建列簇 并和表的描述器进行关联
			HColumnDescriptor family = new HColumnDescriptor("info01");
			hd.addFamily(family);
			// 创建表
			admin.createTable(hd);
		}

	}

	// 查看表列表
	@Test
	public void test3() throws IOException {

		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);

		// DDL操作
		// 获取ddl的句柄
		admin = (HBaseAdmin) conn.getAdmin();
		TableName[] tnames = admin.listTableNames();
		System.out.println(Arrays.toString(tnames));
	}

	// 删除表
	@Test
	public void test4() throws IOException {

		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);

		// DDL操作
		// 获取ddl的句柄
		admin = (HBaseAdmin) conn.getAdmin();
		if (admin.tableExists("test2")) {
			// 先进行禁用再删除
			admin.disableTable("test2");
			admin.deleteTable("test2");
		} else {
			System.out.println("表不存在呀");
		}

	}

	// DML操作
	@Test
	public void test5() throws IOException {

		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);
		// 获取dml的句柄
		// 一个Htable对象代表一个表
		HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));

		// 数据导入 重点****************
		// 插入单条数据 Put对象是封装需要插入的数据,每一条数据都要封装一个普通对象
		Put put = new Put("rk001".getBytes());
		// 参数1是列簇 参数2 是列 参数3 是值
		put.addColumn("info1".getBytes(), "age".getBytes(), "100".getBytes());
		table.put(put);
	}

	// 批量数据导入 list
	// 先将插入的数据放在list集合(也就是放在内存中)并没有提交,等放置完成之后一起提交,这种情况有可能出现内存溢出,因为list集合太大的话就Juin占满内存
	@Test
	public void test6() throws IOException {
		long start = System.currentTimeMillis();
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);
		// 获取dml的句柄
		// 一个Htable对象代表一个表
		HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
		// 创建list
		List<Put> list = new ArrayList<>();
		for (int i = 0; i < 10000; i++) {
			Put put = new Put(("rk" + i).getBytes());
			put.addColumn("info1".getBytes(), "age".getBytes(), ("" + i).getBytes());
			list.add(put);
		}
		table.put(list);

		long end = System.currentTimeMillis();
		System.out.println("用时:" + (end - start));
	}

	// 利用本地缓存批量数据导入,本地缓存是基于磁盘的,不会占用太多的内存,但是这种方式是没有list集合的方法速度快
	@Test
	public void test7() throws IOException {
		long start = System.currentTimeMillis();
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);
		// 获取dml的句柄
		// 一个Htable对象代表一个表
		HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
		// 设置是否需要自动刷新自动提交put对象,默认true,默认一条数据就会提交一次
		// 将参数改为false 不会立即提交,达到我们设定的值才会提交
		table.setAutoFlushTo(false);
		for (int i = 0; i < 10000; i++) {
			Put put = new Put(("rk" + i).getBytes());
			put.addColumn("info1".getBytes(), "age".getBytes(), ("" + i).getBytes());
			// 这时候不会自动提交到hbase了 提交到本地缓存了
			table.put(put);
			// 如果设置缓存的大小一般就不用设置指定条数提交了,但是这两种方式注意最后提交一次
			table.setWriteBufferSize(10 * 1024 * 1024);// 这是设置缓存的大小,
			if (i % 3000 == 0) {
				table.flushCommits();
			}
		}
		table.flushCommits();
		long end = System.currentTimeMillis();
		System.out.println("用时:" + (end - start));
	}

	// 数据删除
	@Test
	public void test8() throws IOException {
		long start = System.currentTimeMillis();
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);
		// 获取dml的句柄
		// 一个Htable对象代表一个表
		HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
		Delete delete = new Delete("rk1".getBytes());
		delete.addColumn("info1".getBytes(), "age".getBytes());
		table.delete(delete);
	}

	// 批量删除
	@Test
	public void test9() throws IOException {
		long start = System.currentTimeMillis();
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);
		// 获取dml的句柄
		// 一个Htable对象代表一个表
		HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
		// 创建list
		List<Delete> list = new ArrayList<>();
		for (int i = 0; i < 10000; i++) {
			Delete delete = new Delete("rk1".getBytes());
			delete.addColumn("info1".getBytes(), "age".getBytes());
			list.add(delete);
		}
		table.delete(list);

		long end = System.currentTimeMillis();
		System.out.println("用时:" + (end - start));
	}

	// 查询
	@Test
	public void test10() throws IOException {
		long start = System.currentTimeMillis();
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);
		// 获取dml的句柄
		// 一个Htable对象代表一个表
		HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
		// 指定的行键进行查询
		Get get = new Get("rk9977".getBytes());
		// get.addColumn(family, qualifier)//也可以指定列簇和列
		// result是封装的get查询的结果 里边可能包含多个列簇 列 单元格
		Result result = table.get(get);
		// 获取一条结果集的所有的单元格
		List<Cell> listCells = result.listCells();
		for (Cell cell : listCells) {
			System.out.print(new String(cell.getRow()) + "\t");
			System.out.print(new String(cell.getQualifier()) + "\t");
			System.out.print(new String(cell.getFamily()) + "\t");
			System.out.print(new String(cell.getValue()) + "\t");
			System.out.print(cell.getTimestamp() + "\t");
			System.out.println();
		}
	}

	// 批量查询
	@Test
	public void test11() throws IOException {
		long start = System.currentTimeMillis();
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);
		// 获取dml的句柄
		// 一个Htable对象代表一个表
		HTable table = (HTable) conn.getTable(TableName.valueOf("test1"));
		// 创建list集合
		List<Get> list = new ArrayList<>();
		// 指定的行键进行查询
		for (int i = 100; i < 1010; i++) {
			Get get = new Get(("rk" + i).getBytes());
			list.add(get);
		}
		// result是封装的get查询的结果 里边可能包含多个列簇 列 单元格
		Result[] results = table.get(list);
		for (Result result : results) {
			List<Cell> listCells = result.listCells();
			for (Cell cell : listCells) {
				System.out.print(new String(cell.getRow()) + "\t");
				System.out.print(new String(cell.getQualifier()) + "\t");
				System.out.print(new String(cell.getFamily()) + "\t");
				System.out.print(new String(cell.getValue()) + "\t");
				System.out.print(cell.getTimestamp() + "\t");
				System.out.println();
			}
		}
	}

	// 表扫描
	@Test
	public void test12() throws IOException {
		long start = System.currentTimeMillis();
		// 获取Hbase配置文件的对象
		// HBaseConfiguration conf=(HBaseConfiguration) HBaseConfiguration.create();
		Configuration conf = HBaseConfiguration.create();
		// 设置conf的zk访问路径
		conf.set("hbase.zookeeper.quorum", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		// 创建hbase连接
		Connection conn = ConnectionFactory.createConnection(conf);
		System.out.println(conn);
		// 获取dml的句柄
		// 一个Htable对象代表一个表
		HTable table = (HTable) conn.getTable(TableName.valueOf("user_info"));
		// 封装一个用于插训scan对象
		Scan scan = new Scan();
		// scan指定行键范围 含头不含尾
		scan.setStartRow("baiyc_20150716_0006".trim().getBytes());
		scan.setStopRow("user0001".trim().getBytes());

		// 设置时间戳的范围 含头不含尾
		scan.setTimeRange(1559098923438L, 1559098924997L);
		// 设置列簇
		scan.addFamily("base_info".getBytes());
		// 设置列
		scan.addColumn("base_info".getBytes(), "name".getBytes());
		ResultScanner scanner = table.getScanner(scan);
		// 获取迭代器的对象
		Iterator<Result> it = scanner.iterator();
		while (it.hasNext()) {
			Result result = it.next();
			List<Cell> listCells = result.listCells();
			for (Cell cell : listCells) {
				System.out.print(new String(cell.getRow()) + "\t");
				System.out.print(new String(cell.getQualifier()) + "\t");
				System.out.print(new String(cell.getFamily()) + "\t");
				System.out.print(new String(cell.getValue()) + "\t");
				System.out.print(cell.getTimestamp() + "\t");
				System.out.println();
			}
			System.out.println();
		}
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值