HBase Java API编程示例_1

Apache HBase是用Java编写的,它的原生API也是Java开发的。我们可以使用Java调用API来访问HBase。

任务说明

创建一个学生信息表,用来存储学生姓名(姓名作为行键,并且假设姓名不会重复)以及考试成绩,其中,考试成绩是一个列族,分别存储了各个科目的考试成绩。学生信息表的表结构和需要添加的数据如下表所示。

代码实现

首先要新建一个Java工程,在工程中导入一下jar包。这里只需要导入hbase安装目录中的lib文件中的所有jar包即可,不用再导入Hadoop中的jar包,避免由于Hadoop和HBase的版本冲突引起错误。

另外,在Windows下开发、在HDFS上测试的话,需要将HBase的hbase-site.xml配置文件拷贝到项目的src目录下。

【示例】创建表、插入数据、浏览数据。

1、创建一个单独的工具方法,用来操作HBase表:

public class HBaseUtil {
	
	private static Configuration configuration; 	// 管理HBase的配置信息
	private static Connection connection; 	// 管理HBase连接
	private static Admin admin; 			// 管理HBase数据库的表信息

	public static void init(){}				// 连接数据库连接
	public static void close(){}				// 关闭连接
	public static void createTable(){}		// 创建表
	public static void add(){}				// 向表中插入数据
	public static void query(){}				// 获取指定单元格的数据	
}

2、建立连接,关闭连接。

	// 连接数据库连接
	public static void init() {
		configuration = HBaseConfiguration.create();
		configuration.set("hbase.rootdir", "hdfs://master:8020/hbase");

		try {
			System.out.println("正在和数据库建立连接...");
			connection = ConnectionFactory.createConnection(configuration);
			admin = connection.getAdmin();
			System.out.println("连接已建立");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 关闭连接
	public static void close() {
		try {
			if (null != admin) {
				admin.close();
			}
			if (null != connection) {
				connection.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

3、创建表。

	// 创建表:创建表时,需要给出表名和列族名称
	/**
	 * 
	 * @param tableName
	 * @param colFamilies
	 * @throws IOException
	 */
	public static void createTable(String tableName, String[] colFamilies) throws IOException {
		TableName tbName = TableName.valueOf(tableName);
		if (admin.tableExists(tbName)) {
			System.out.println("表已经存在了!");
			return;
		}

		HTableDescriptor hTableDescriptor = new HTableDescriptor(tbName);
		for (String family : colFamilies) {
			HColumnDescriptor hColDescriptor = new HColumnDescriptor(family);
			hTableDescriptor.addFamily(hColDescriptor);
		}

		admin.createTable(hTableDescriptor);
	}

4、添加数据。

	// 向表中插入数据
	/**
	 * 
	 * @param tableName
	 * @param rowKey
	 * @param colFamily
	 * @param column
	 * @param value
	 * @throws IOException
	 */
	public static void add(String tableName, String rowKey, String colFamily, String column, String value)
			throws IOException {
		Table table = connection.getTable(TableName.valueOf(tableName));
		Put put = new Put(rowKey.getBytes());	// 设置行键
		put.addColumn(colFamily.getBytes(), column.getBytes(), value.getBytes());
		
		table.put(put);
		table.close();
	}

5、获取指定单元格的数据。

	// 获取指定单元格的数据
	public static void query(String tableName, String rowKey, String colFamily, String column) throws IOException {
		Table table = connection.getTable(TableName.valueOf(tableName));
		Get get = new Get(rowKey.getBytes());	// 设置行键
		get.addFamily(colFamily.getBytes());
		Result result = table.get(get);
		
		byte[] valueBytes = result.getValue(colFamily.getBytes(), column==null?null:column.getBytes());
		String value = new String(valueBytes);
		System.out.println("成绩是:" + value);
		
		table.close();
	}

6、测试类。

/*
 * 说明: 需要在项目中引入hbase jar包
 *     这里导入HBase安装目录下的lib目录下的所有jar包即可。
 * 运行时注意:
 *     如果是在Windows下连接Linux测试,则需要:
 *     1、将hbase-site.xml文件拷贝到项目的src目录下;
 *     2、在Windows->System32->drivers->hosts文件中,配置IP和机器名映射,例如:
 *     192.168.190.137  master
 *     192.168.190.138  slave1
 *     192.168.190.139  slave2
 */
public class HBaseDemo1 {
	
	private static String TABLE_NAME = "student";			// 表名
	private static String[] COL_FAMILIES = {"score"};		// 列族
	
	public static void main(String[] args) throws IOException {
		HBaseUtil.init();				// 建立连接	
		
		HBaseUtil.createTable(TABLE_NAME, COL_FAMILIES);		// 创建表
		
		String rowKey1 = "zhangsan";
		HBaseUtil.add(TABLE_NAME,rowKey1,COL_FAMILIES[0],"English","69");	// 插入单元格数据
		HBaseUtil.add(TABLE_NAME,rowKey1,COL_FAMILIES[0],"Math","86");		// 
		HBaseUtil.add(TABLE_NAME,rowKey1,COL_FAMILIES[0],"Computer","97");	//
		
		String rowKey2 = "lisi";
		HBaseUtil.add(TABLE_NAME,rowKey2,COL_FAMILIES[0],"English","55");	// 插入单元格数据
		HBaseUtil.add(TABLE_NAME,rowKey2,COL_FAMILIES[0],"Math","100");		// 
		HBaseUtil.add(TABLE_NAME,rowKey2,COL_FAMILIES[0],"Computer","88");	//
		
		HBaseUtil.query(TABLE_NAME,rowKey1,COL_FAMILIES[0],"Computer");	// 浏览单元格数据
		HBaseUtil.close();			// 关闭连接
	}

}

《PySpark原理深入与编程实战》