1、基于 Java 的 HBase 客户端编程本文以 HBase 0.90.2 为例,介绍如何在 Windows 系统,Eclipse IDE 集成环境下,使用Java 语言,进行 HBase 客户端编程,包含建立表、删除表、插入记录、删除记录、各种方式下的查询操作等。 AD: 本文以 HBase 0.90.2 为例,介绍如何在 Windows 系统,Eclipse IDE 集成环境下,使用 Java 语言,进行HBase 客户端编程,包含建立表、删除表、插入记录、删除记录、各种方式下的查询操作等。1. 准备工作1. 下载后安装 jdk 包(这里使用的是 jdk-6u10-rc2-bin-b32-
2、windows-i586-p-12_sep_2008); 2. 下载 eclipse,解压到本地(这里使用的是 eclipse-java-helios-SR2-win32); 3. 下载 HBase 包,解压安装包到本地(这里使用的是 hbase-0.90.2)。 2. 搭建开发环境1. 运行 Eclipse,创建一个新的 Java 工程“HBaseClient”,右键项目根目录,选择 “Properties”-“Java Build Path”-“Library”-“Add External JARs”,将 HBase 解压后根目录下的 hbase-0.90.2.jar、hbase-0.90
3、.2-tests.jar 和 lib 子目录下所有 jar 包添加到本工程的 Classpath 下。 2. 按照步骤 1 中的操作,将自己所连接的 HBase 的配置文件 hbase-site.xml 添加到本工程的Classpath 中,如下所示为配置文件的一个示例: 1. 2. 3. hbase.rootdir 4. hdfs:/hostname:9000/hbase 5. 6. 7. hbase.cluster.distributed 8. true 9. 10. 11.hbase.zookeeper.quorum 12.*.*.*.*, *.*.*.*, *.*.*.* 13. 14
4、. 15.hbase.defaults.for.version 16.0.90.2 17. 18. 3. 下面可以在 Eclipse 环境下进行 HBase 编程了。 3. HBase 基本操作代码示例3.1 初始化配置1. private static Configuration conf = null; 2. /* 3. * 初始化配置 4. */ 5. static 6. conf = HBaseConfiguration.create(); 7. 3.2 创建表1. /* 2. * 创建表操作 3. * throws IOException 4. */ 5. public void c
5、reateTable(String tablename, String cfs) throws IOException 6. HBaseAdmin admin = new HBaseAdmin(conf); 7. if (admin.tableExists(tablename) 8. System.out.println(“表已经存在!“); 9. 10. else 11. HTableDescriptor tableDesc = new HTableDescriptor(tablename); 12. for (int i = 0; i cfs.length; i+) 13. tableDe
6、sc.addFamily(new HColumnDescriptor(cfsi); 14. 15. admin.createTable(tableDesc); 16. System.out.println(“表创建成功!“); 17. 18. 3.3 删除表1. /* 2. * 删除表操作 3. * param tablename 4. * throws IOException 5. */ 6. public void deleteTable(String tablename) throws IOException 7. try 8. HBaseAdmin admin = new HBaseA
7、dmin(conf); 9. admin.disableTable(tablename); 10. admin.deleteTable(tablename); 11. System.out.println(“表删除成功!“); 12. catch (MasterNotRunningException e) 13. e.printStackTrace(); 14. catch (ZooKeeperConnectionException e) 15. e.printStackTrace(); 16. 17. 3.4 插入一行记录1. /* 2. * 插入一行记录 3. * param tablen
8、ame 4. * param cfs 5. */ 6. public void writeRow(String tablename, String cfs) 7. try 8. HTable table = new HTable(conf, tablename); 9. Put put = new Put(Bytes.toBytes(“rows1“); 10. for (int j = 0; j cfs.length; j+) 11. put.add(Bytes.toBytes(cfsj), 12. Bytes.toBytes(String.valueOf(1), 13. Bytes.toBy
9、tes(“value_1“); 14. table.put(put); 15. 16. catch (IOException e) 17. e.printStackTrace(); 18. 19. 3.5 删除一行记录1. /* 2. * 删除一行记录 3. * param tablename 4. * param rowkey 5. * throws IOException 6. */ 7. public void deleteRow(String tablename, String rowkey) throws IOException 8. HTable table = new HTabl
10、e(conf, tablename); 9. List list = new ArrayList(); 10. Delete d1 = new Delete(rowkey.getBytes(); 11. list.add(d1); 12. table.delete(list); 13. System.out.println(“删除行成功!“); 14. 3.6 查找一行记录1. /* 2. * 查找一行记录 3. * param tablename 4. * param rowkey 5. */ 6. public static void selectRow(String tablename,
11、 String rowKey) 7. throws IOException 8. HTable table = new HTable(conf, tablename); 9. Get g = new Get(rowKey.getBytes(); 10. Result rs = table.get(g); 11. for (KeyValue kv : rs.raw() 12. System.out.print(new String(kv.getRow() + “ “); 13. System.out.print(new String(kv.getFamily() + “:“); 14. Syst
12、em.out.print(new String(kv.getQualifier() + “ “); 15. System.out.print(kv.getTimestamp() + “ “); 16. System.out.println(new String(kv.getValue(); 17. 18. 3.7 查询表中所有行1. /* 2. * 查询表中所有行 3. * param tablename 4. */ 5. public void scaner(String tablename) 6. try 7. HTable table = new HTable(conf, tablena
13、me); 8. Scan s = new Scan(); 9. ResultScanner rs = table.getScanner(s); 10. for (Result r : rs) 11. KeyValue kv = r.raw(); 12. for (int i = 0; i kv.length; i+) 13. System.out.print(new String(kvi.getRow() + “ “); 14. System.out.print(new String(kvi.getFamily() + “:“);15. System.out.print(new String(kvi.getQualifier() + “ “); 16. System.out.print(kvi.getTimestamp() + “ “); 17. System.out.println(new String(kvi.getValue(); 18. 19. 20. catch (IOException e) 21. e.printStackTrace(); 22. 23.