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(); // 关闭连接
}
}