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