欢迎投稿

今日深度:

HBase编程实例,

HBase编程实例,


摘要 在前文中安装了Hbase,通过Hbase shell可以进行一些操作,但是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的实例。

目录[-]

  • 一、使用Eclipse开发HBase应用程序
  • 二、简要介绍HBaseJava API
  • 三、 HBase Java API简单实例
  • 四、总结
  • 摘要:在前文中安装了Hbase,通过Hbase shell可以进行一些操作,但是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的实例。

     

    一、使用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简单实例

     

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

     

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

     



     

    四、总结

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

    www.htsjk.Com true http://www.htsjk.com/hbase/40381.html NewsArticle HBase编程实例, 摘要 在前文中安装了Hbase,通过Hbase shell可以进行一些操作,但是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的实例。 目录[-] 一、使用Eclipse开发HB...
    相关文章
      暂无相关文章
    评论暂时关闭