HBase编程实例

原文转载自:

http://blog.csdn.net/minglaihan/article/details/38781651

一、使用Eclipse开发HBase应用程序

1,在Eclipse中新建一个Java Project,命名为HBaseTest,然后右键Properties中选择Java Build Path,选择Add External Jars,将HBase/lib目录下的jar包导入进来。

2,在工程根目录下创建Conf文件夹,将HBase/Conf下的hbase-site.xml文件复制到该文件夹中,通过右键选择Properties->Java BuildPath->Libraries->Add Class Folder,然后选择Conf文件夹即可。

 二、简要介绍HBaseJava API

1,  HbaseConfiguration

关系:org.apache.hadoop.hbase.HBaseConfiguration

作用:通过此类可以对HBase进行配置

      

2,  HBaseAdmin

         关系:org.apache.hadoop.hbase.client.HBaseAdmin

         作用:提供一个接口来管理HBase数据库中的表信息。它提供创建表、删除表等方法。

 

3,  HTableDescriptor

         关系:org.apache.hadoop.hbase.client.HTableDescriptor

          作用:包含了表的名字及其对应列族。 提供的方法有

        void          addFamily(HColumnDescriptor)          添加一个列族

        HColumnDescriptor   removeFamily(byte[] column)      移除一个列族

        byte[]              getName()                     获取表的名字

        byte[]              getValue(byte[] key)              获取属性的值

        void                setValue(String key,Stringvalue)    设置属性的值

 

4,  HColumnDescriptor

        关系:org.apache.hadoop.hbase.client.HColumnDescriptor

        作用:维护关于列的信息。提供的方法有

        byte[]              getName()                   获取列族的名字

        byte[]              getValue()                获取对应的属性的值

        void              setValue(String key,String value)设置对应属性的值

 

5,  HTable

        关系:org.apache.hadoop.hbase.client.HTable

作用:用户与HBase表进行通信。此方法对于更新操作来说是非线程安全的,如果启动多个线程尝试与单个HTable实例进行通信,那么写缓冲器可能会崩溃。

 

6,  Put

        关系:org.apache.hadoop.hbase.client.Put

        作用:用于对单个行执行添加操作

7,  Get

        关系:org.apache.hadoop.hbase.client.Get

        作用:用于获取单个行的相关信息

8,  Result

        关系:org.apache.hadoop.hbase.client.Result

        作用:存储Get或Scan操作后获取的单行值。

9,  ResultScanner

        关系:Interface

        作用:客户端获取值的接口。

 

三、 HBase Java API简单实例

 

[java]  view plain copy print ?
  1. import java.io.IOException;  
  2.   
  3. import org.apache.hadoop.conf.Configuration;  
  4. import org.apache.hadoop.hbase.HBaseConfiguration;  
  5. import org.apache.hadoop.hbase.HColumnDescriptor;  
  6. import org.apache.hadoop.hbase.HTableDescriptor;  
  7. import org.apache.hadoop.hbase.client.HBaseAdmin;  
  8. import org.apache.hadoop.hbase.client.HTable;  
  9. import org.apache.hadoop.hbase.client.Put;  
  10. import org.apache.hadoop.hbase.client.Get;  
  11. import org.apache.hadoop.hbase.client.Result;  
  12. import org.apache.hadoop.hbase.client.ResultScanner;  
  13. import org.apache.hadoop.hbase.client.Scan;  
  14. import org.apache.hadoop.hbase.util.Bytes;  
  15. /* 
  16.  * @author minglaihan 
  17.  */  
  18.   
  19. public class HBaseTest {  
  20.       
  21.     static Configuration cfg = HBaseConfiguration.create();  
  22.       
  23.     //通过HBaseAdmin HTableDescriptor来创建一个新表  
  24.     public static void create(String tableName, String columnFamily) throws Exception{  
  25.         HBaseAdmin admin = new HBaseAdmin(cfg);  
  26.         if(admin.tableExists(tableName)){  
  27.             System.out.println("Table exist");  
  28.             System.exit(0);  
  29.         }  
  30.         else {  
  31.             HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);  
  32.             tableDescriptor.addFamily(new HColumnDescriptor(columnFamily));  
  33.             admin.createTable(tableDescriptor);  
  34.             System.out.println("Table create success");  
  35.         }  
  36.     }  
  37.       
  38.     //添加一条数据,通过HTable Put为已存在的表添加数据  
  39.     public static void put(String tableName,String row,String columnFamily,String column,String data) throws IOException{  
  40.         HTable table = new HTable(cfg, tableName);  
  41.         Put put = new Put(Bytes.toBytes(row));  
  42.         put.add(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(data));  
  43.         table.put(put);  
  44.         System.out.println("put success");  
  45.     }  
  46.       
  47.     //获取tableName表里列为row的结果集  
  48.     public static void get(String tableName,String row) throws IOException{  
  49.         HTable table = new HTable(cfg, tableName);  
  50.         Get get = new Get(Bytes.toBytes(row));  
  51.         Result result = table.get(get);  
  52.         System.out.println("get "+ result);   
  53.     }  
  54.       
  55.     //通过HTable Scan来获取tableName表的所有数据信息  
  56.     public static void scan (String tableName) throws IOException{  
  57.         HTable table = new HTable(cfg, tableName);  
  58.         Scan scan = new Scan();  
  59.         ResultScanner resultScanner = table.getScanner(scan);  
  60.         for(Result s:resultScanner){  
  61.             System.out.println("Scan "+ resultScanner);  
  62.         }  
  63.     }  
  64.       
  65.     public static boolean delete(String tableName) throws Exception{  
  66.         HBaseAdmin admin = new HBaseAdmin(cfg);  
  67.         if(admin.tableExists(tableName)){  
  68.             try {  
  69.                 admin.disableTable(tableName);  
  70.                 admin.deleteTable(tableName);  
  71.             } catch (Exception e) {  
  72.                 // TODO: handle exception  
  73.                 e.printStackTrace();  
  74.                 return false;  
  75.             }  
  76.         }  
  77.         return true;  
  78.     }  
  79.       
  80.     public static void main(String[] args) {  
  81.         String tableName = "hbase_test";  
  82.         String columnFamily = "c1";  
  83.           
  84.         try {  
  85.             HBaseTest.create(tableName, columnFamily);  
  86.             HBaseTest.put(tableName, "row1", columnFamily, "column1""data1");  
  87.             HBaseTest.get(tableName, "row1");  
  88.             HBaseTest.scan(tableName);  
  89.             if(HBaseTest.delete(tableName)==true){  
  90.                 System.out.println("delete table "+ tableName+"success");  
  91.             }  
  92.               
  93.         } catch (Exception e) {  
  94.             // TODO: handle exception  
  95.             e.printStackTrace();  
  96.         }  
  97.     }  
  98. }  


 

将Delete的步骤注释掉的运行结果截图:

 HBase编程实例_第1张图片


HBase编程实例_第2张图片

 

四、       总结

       HBase与Java API的交互目前表现良好,在今后的hadoop编程中,可以根据HBase的情况适当利用,提高整体水平。


转载请注明出处: http://www.ming-yue.cn/hbase-program-examples/


你可能感兴趣的:(Hbase)