zoukankan      html  css  js  c++  java
  • HBase编程实例

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

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

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

    2,在project根目录下创建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

            作用:client获取值的接口。

    三、 HBase Java API简单实例

    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的情况适当利用,提高总体水平。


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


  • 相关阅读:
    swift学习-----字典
    Swift学习----数组
    Swift学习-----循环
    Swift学习-----可选类型
    Swift学习-----分支
    Swift学习------常量与变量
    autorelease,autoreleasepool基本使用
    SDWebImage缓存图片的机制(转)
    新闻网站项目django--分类页
    新闻网站项目django--首页
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6944316.html
Copyright © 2011-2022 走看看