在idea中建立Maven Java项目。
在pom.xml中引入对应版本的HBase依赖:
<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.4.8</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase</artifactId> <version>2.4.8</version> <type>pom</type> </dependency> </dependencies>
Java代码,详见代码及注释即可。
package com.alan; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class TestHBase { private static Configuration conf = HBaseConfiguration.create(); private static Admin admin; private static Connection connection = null; static { //HBase Master地址,在hbase-site.xml中配置 conf.set("hbase.rootdir", "hdfs://hp301:9000/hbase"); //ZooKeeper三个服务器地址 conf.set("hbase.zookeeper.quorum", "hp301,hp302,hp303"); try { connection = ConnectionFactory.createConnection(conf); admin = connection.getAdmin(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws IOException { TestHBase test = new TestHBase(); // test.createTable("java_test");//建表 //test.createTable2("java_test","f1","f2");//建表(制定行键) //test.addData("java_test");//插入数据 //test.insertBatchData("test");//插入多个数据 //test.getData("java_test");//通过Get查找单行数据,注意列值的类型 test.scanAllData("java_test");//通过Scan方法扫描全表 // test.deleteData("java_test");//删除表数据 //test.deleteTable("java_test");//删除表 admin.close(); connection.close(); } public void createTable2(String tableName, String... columnFamily) { TableName tableNameObj = TableName.valueOf(tableName); try { if (admin.tableExists(tableNameObj)) { System.out.println("Table: " + tableName + " already exists!"); } else { HTableDescriptor tb = new HTableDescriptor(tableNameObj); for (int i = 0; i < columnFamily.length; i++) { HColumnDescriptor family = new HColumnDescriptor(columnFamily[i]); tb.addFamily(family); } admin.createTable(tb); System.out.println(tableName + "创建表成功"); } } catch (IOException e) { e.printStackTrace(); System.out.println(tableName + "创建表失败"); } } public void createTable(String tableName) throws IOException { //通过管理员对象创建表 HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName)); //给表添加列族 HColumnDescriptor f1 = new HColumnDescriptor("f1"); HColumnDescriptor f2 = new HColumnDescriptor("f2"); //将两个列族设置到 创建的表中 hTableDescriptor.addFamily(f1); hTableDescriptor.addFamily(f2); //创建表 admin.createTable(hTableDescriptor); //关闭连接 admin.close(); connection.close(); System.out.println("创建表成功"); } public void addData(String tableName) throws IOException { //获取表对象 Table myuser = connection.getTable(TableName.valueOf(tableName)); Put put = new Put("0001".getBytes()); put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1)); put.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小明")); put.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(22)); put.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("男")); put.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("青岛")); put.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000001")); put.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("你好")); myuser.put(put); //关闭表 myuser.close(); System.out.println("插入数据成功"); } public void insertBatchData(String tableName) throws IOException { //获取表 Table myuser = connection.getTable(TableName.valueOf(tableName)); //创建put对象,并指定rowkey Put put = new Put("0002".getBytes()); put.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(1)); put.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小红")); put.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(21)); put.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("女")); put.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("济南")); put.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000002")); put.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("Hello!")); Put put2 = new Put("0003".getBytes()); put2.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(2)); put2.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小强")); put2.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(22)); put2.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("男")); put2.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("北京")); put2.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000003")); put2.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("俺北京……")); Put put3 = new Put("0004".getBytes()); put3.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(4)); put3.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小花")); put3.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(23)); put3.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("女")); put3.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("重庆")); put3.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000004")); put3.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("要得")); Put put4 = new Put("0005".getBytes()); put4.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(5)); put4.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小杰")); put4.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(24)); put4.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("男")); put4.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("上海")); put4.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000005")); put4.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("阿拉桑海人")); Put put5 = new Put("0006".getBytes()); put5.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(6)); put5.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小雨")); put5.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(22)); put5.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("女")); put5.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("广东")); put5.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000006")); put5.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("洒洒水")); Put put6 = new Put("0007".getBytes()); put6.addColumn("f1".getBytes(), "id".getBytes(), Bytes.toBytes(7)); put6.addColumn("f1".getBytes(), "name".getBytes(), Bytes.toBytes("小瓜")); put6.addColumn("f1".getBytes(), "age".getBytes(), Bytes.toBytes(22)); put6.addColumn("f2".getBytes(), "sex".getBytes(), Bytes.toBytes("男")); put6.addColumn("f2".getBytes(), "address".getBytes(), Bytes.toBytes("江苏")); put6.addColumn("f2".getBytes(), "phone".getBytes(), Bytes.toBytes("15900000007")); put6.addColumn("f2".getBytes(), "say".getBytes(), Bytes.toBytes("我是苏南的")); List<Put> listPut = new ArrayList<Put>(); listPut.add(put); listPut.add(put2); listPut.add(put3); listPut.add(put4); listPut.add(put5); listPut.add(put6); myuser.put(listPut); myuser.close(); System.out.println("插入多个数据成功"); } public void getData(String tableName) throws IOException { //获取表对象 Table myuser = connection.getTable(TableName.valueOf(tableName)); Get get = new Get("0005".getBytes()); get.addColumn("f2".getBytes(), "address".getBytes());//列族;列名 //获取返回结果 Result result = myuser.get(get); List<Cell> cells = result.listCells(); for (Cell cell : cells) { //获取列族的名称 String familyName = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength()); //获取列的名称 String columnName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()); if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) { int value = Bytes.toInt(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); System.out.println("列族名: " + familyName + " ,列名: " + columnName + " ,列值:" + value); } else { String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); System.out.println("列族名: " + familyName + " ,列名: " + columnName + " ,列值:" + value); } } //关闭表 myuser.close(); } public void scanAllData(String tableName) throws IOException { //获取表对象 Table myuser = connection.getTable(TableName.valueOf(tableName)); Scan scan = new Scan(); //设置起始和结束的rowkey,扫描结果是:[)类型 scan.setStartRow("0001".getBytes()); scan.setStopRow("0008".getBytes()); ResultScanner scanner = myuser.getScanner(scan); for (Result result : scanner) { List<Cell> cells = result.listCells(); for (Cell cell : cells) { String rowkey = Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength()); //获取列族的名称 String familyName = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength()); //获取列的名称 String columnName = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()); if (familyName.equals("f1") && columnName.equals("id") || columnName.equals("age")) { int value = Bytes.toInt(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); System.out.println("列族名: " + familyName + " ,列名: " + columnName + " ,列值:" + value); } else { String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()); System.out.println("列族名: " + familyName + " ,列名: " + columnName + " ,列值:" + value); } } } //获取返回结果 myuser.close(); } public void deleteData(String talbeName) throws IOException { //获取表对象 Table myuser = connection.getTable(TableName.valueOf(talbeName)); Delete delete = new Delete("0001".getBytes()); myuser.delete(delete); myuser.close(); System.out.println("删除成功"); } public void deleteTable(String tableName) throws IOException { //获取管理员对象 Admin admin = connection.getAdmin(); //禁用表 admin.disableTable(TableName.valueOf(tableName)); //删除表 admin.deleteTable(TableName.valueOf(tableName)); System.out.println("删除表成功"); } }
运行查询代码,控制台中输出: