Hbase的javaAPI之基础操作

Hbase的javaAPI操作

首先需要导入依赖的jar包,把解压hbase目录中的
/root/training/hbase-2.2.0/lib中所有的jar包和
/root/training/hbase-2.2.0/lib/client-facing-thirdparty下的所有jar导入到你开发hbase的工程文件当中
注意几点
一、因为客户端是通过client连接zookeeper来操作hbase,而client从zookeeper中获取到的连接主机的是主机名不是ip地址,所以我们需要在windows中host文件中配置主机名对应的ip地址
二、所有hbase都是基于对象编程的,比如创建数据库,创建数据表,添加数据
三、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.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
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.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Test;


public class HbaseDDLDML
{
	@Test
	public void createTable() throws Exception {
		//添加配置、创建一个链接
		Configuration conf=HBaseConfiguration.create();
		//设置zookeeper地址
		conf.set("hbase.zookeeper.quorum", "192.168.112.111");
		//通过工厂对象拿到一个链接
		Connection client = ConnectionFactory.createConnection(conf);
		//获取管理对象
		Admin admin = client.getAdmin();
		//创建一个table构造器并添加表名
		TableDescriptorBuilder builder=TableDescriptorBuilder.newBuilder(TableName.valueOf("mystudent"));
		//添加列族
		//单行构建和批量构建够可以
		/*builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of("info"));
		builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of("grade"));*/
		List<ColumnFamilyDescriptor> columns=new ArrayList<>();
		columns.add(ColumnFamilyDescriptorBuilder.of("info"));
		columns.add(ColumnFamilyDescriptorBuilder.of("grade"));
		builder.setColumnFamilies(columns);
		//创建表
		admin.createTable(builder.build());
		//关闭链接
		admin.close();
		client.close();
	}
	//添加数据
	@Test
	public void insert() {
		Configuration conf=HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.112.111");
		//通过配置获取一个链接
		Connection connection=null;
		Table table =null;
		try
		{
			//通过配置获取一个链接
			connection = ConnectionFactory.createConnection(conf);
			//通过链接获取一个table
			table = connection.getTable(TableName.valueOf("mystudent"));
			//然后在构建一个put对象,每行数据都是一个Put对象,创建行健的时候是通过行健创建的
			Put put=new Put(Bytes.toBytes("s001"));
			put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"), Bytes.toBytes("Tom"));
			put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("sex"), Bytes.toBytes("man"));
			put.addColumn(Bytes.toBytes("grade"),Bytes.toBytes("yuwen"), Bytes.toBytes("89"));
			table.put(put);
			
		} catch (Exception e)
		{
			e.printStackTrace();
		}finally {
			try
			{
				table.close();
				connection.close();
			} catch (Exception e2)
			{
				e2.printStackTrace();
			}
			
		}
		
	}
	//获取数据
	@Test
	public void testGet() {
		Configuration conf=HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.112.111");
		//通过配置获取一个链接
		Connection connection=null;
		Table table =null;
		try
		{
			//通过配置获取一个链接
			connection = ConnectionFactory.createConnection(conf);
			//通过链接获取一个table
			table = connection.getTable(TableName.valueOf("mystudent"));
			//构造一个get对象
			Get get=new Get(Bytes.toBytes("s001"));
			//指定返回列,如果不指定返回列那么就是返回正行的数据
			get.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));
			get.addColumn(Bytes.toBytes("grade"), Bytes.toBytes("yuwen"));
			Result result = table.get(get);
			System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("grade"), Bytes.toBytes("yuwen"))));
			
		} catch (Exception e)
		{
			e.printStackTrace();
		}finally {
			try
			{
				table.close();
				connection.close();
			} catch (Exception e2)
			{
				e2.printStackTrace();
			}
			
		}
	}
	//获取整张表的数据scan “mystudent”相当于select * from mystudent
	@Test
	public void testScan() {
		Configuration conf=HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.112.111");
		//通过配置获取一个链接
		Connection connection=null;
		Table table =null;
		try
		{
			//通过配置获取一个链接
			connection = ConnectionFactory.createConnection(conf);
			//通过链接获取一个table
			table = connection.getTable(TableName.valueOf("mystudent"));
			//构造一个scan对象,表扫描器,可以添加过滤条,可以单独添加也可以在构造对象中添加
			Scan scan=new Scan();
			ResultScanner scanner = table.getScanner(scan);
			for (Result result : scanner)
			{
				System.out.println(Bytes.toString(result.getValue(Bytes.toBytes("grade"), Bytes.toBytes("yuwen"))));
			}
			//构造一个有get的scan对象
			Get get=new Get(Bytes.toBytes("s001"));
			//指定返回列,如果不指定返回列那么就是返回正行的数据
			get.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));
			get.addColumn(Bytes.toBytes("grade"), Bytes.toBytes("yuwen"));
			Scan scan1=new Scan(get);
			ResultScanner scanner1 = table.getScanner(scan1);
			for (Result result : scanner1)
			{
				System.out.println("scanner1:"+Bytes.toString(result.getValue(Bytes.toBytes("grade"), Bytes.toBytes("yuwen"))));
			}
			
		} catch (Exception e)
		{
			e.printStackTrace();
		}finally {
			try
			{
				table.close();
				connection.close();
			} catch (Exception e2)
			{
				e2.printStackTrace();
			}
			
		}
	}
	//删除一张表,drop属于ddl语句,所以不是基于表上的操作,所以使用管理用户操作
	@Test
	public void testDrop() {
		Configuration conf=HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.112.111");
		//通过配置获取一个链接
		Connection connection=null;
		try
		{
			//通过配置获取一个链接
			connection = ConnectionFactory.createConnection(conf);
			Admin admin = connection.getAdmin();
			admin.disableTable(TableName.valueOf("mystudent"));
			admin.deleteTable(TableName.valueOf("mystudent"));
			
		} catch (Exception e)
		{
			e.printStackTrace();
		}finally {
			try
			{
				connection.close();
			} catch (Exception e2)
			{
				e2.printStackTrace();
			}
			
		}

	}
}

通过代码中可以看出如果是属于ddl语句的,我们通过链接获取的是管理用户来操作
如果是dml语句的话,我们通过链接获取的是表,通过表来进行操作
在这里插入图片描述
Scan的构造有多种方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枣泥馅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值