Ubuntu 14.10 下Eclipse操作HBase

环境介绍

  64位Ubuntu14.10,Hadoop 2.5.0 ,HBase 0.99.0

准备环境

  1 安装Hadoop 2.5.0,可参考http://www.cnblogs.com/liuchangchun/p/4097286.html

  2 安装HBase 0.99.0 ,可参考http://www.cnblogs.com/liuchangchun/p/4096891.html

  3 安装Ecliose

新建Java工程

  1 运行Eclipse,创建一个新的Java工程“MyHBase”,右键项目根目录,选择 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解压后根目录下lib子目录下所有jar 包添加到本工程的Classpath下。
  2.  按照步骤1中的操作,将自己所连接的HBase的配置文件hbase-site.xml添加到本工程的Classpath中,如下所示为配置文件的一个示例:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
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.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
        
public class HBaseTest {         
           
    private static Configuration conf =null;   
     /**  
      * 初始化配置  
     */   
     static {   
         conf = HBaseConfiguration.create();   
     }   
         
    /**   
     * 创建一张表   
     */      
    public static void creatTable(String tableName, String[] familys) throws Exception {      
        HBaseAdmin admin = new HBaseAdmin(conf);      
        if (admin.tableExists(tableName)) {      
            System.out.println("table already exists!");      
        } else {      
            HTableDescriptor tableDesc = new HTableDescriptor(tableName);      
            for(int i=0; i<familys.length; i++){      
                tableDesc.addFamily(new HColumnDescriptor(familys[i]));      
            }      
            admin.createTable(tableDesc);      
            System.out.println("create table " + tableName + " ok.");      
        }        
    }      
           
    /**   
     * 删除表   
     */      
    public static void deleteTable(String tableName) throws Exception {      
       try {      
           HBaseAdmin admin = new HBaseAdmin(conf);      
           admin.disableTable(tableName);      
           admin.deleteTable(tableName);      
           System.out.println("delete table " + tableName + " ok.");      
       } catch (MasterNotRunningException e) {      
           e.printStackTrace();      
       } catch (ZooKeeperConnectionException e) {      
           e.printStackTrace();      
       }      
    }      
            
    /**   
     * 插入一行记录   
     */      
    public static void addRecord (String tableName, String rowKey, String family, String qualifier, String value)      
            throws Exception{      
        try {      
            HTable table = new HTable(conf, tableName);      
            Put put = new Put(Bytes.toBytes(rowKey));      
            put.add(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(value));      
            table.put(put);      
            System.out.println("insert recored " + rowKey + " to table " + tableName +" ok.");      
        } catch (IOException e) {      
            e.printStackTrace();      
        }      
    }      
        
    /**   
     * 删除一行记录   
     */      
    public static void delRecord (String tableName, String rowKey) throws IOException{      
        HTable table = new HTable(conf, tableName);      
        List list = new ArrayList();      
        Delete del = new Delete(rowKey.getBytes());      
        list.add(del);      
        table.delete(list);      
        System.out.println("del recored " + rowKey + " ok.");      
    }      
            
    /**   
     * 查找一行记录   
     */      
    public static void getOneRecord (String tableName, String rowKey) throws IOException{      
        HTable table = new HTable(conf, tableName);      
        Get get = new Get(rowKey.getBytes());      
        Result rs = table.get(get);      
        for(KeyValue kv : rs.raw()){      
            System.out.print(new String(kv.getRow()) + " " );      
            System.out.print(new String(kv.getFamily()) + ":" );      
            System.out.print(new String(kv.getQualifier()) + " " );      
            System.out.print(kv.getTimestamp() + " " );      
            System.out.println(new String(kv.getValue()));      
        }      
    }      
            
    /**   
     * 显示所有数据   
     */      
    public static void getAllRecord (String tableName) {      
        try{      
             HTable table = new HTable(conf, tableName);      
             Scan s = new Scan();      
             ResultScanner ss = table.getScanner(s);      
             for(Result r:ss){      
                 for(KeyValue kv : r.raw()){      
                    System.out.print(new String(kv.getRow()) + " ");      
                    System.out.print(new String(kv.getFamily()) + ":");      
                    System.out.print(new String(kv.getQualifier()) + " ");      
                    System.out.print(kv.getTimestamp() + " ");      
                    System.out.println(new String(kv.getValue()));      
                 }      
             }      
        } catch (IOException e){      
            e.printStackTrace();      
        }      
    }      
           
    public static void  main (String [] agrs) {      
        try {      
            String tablename = "scores";      
            String[] familys = {"grade", "course"};      
            HBaseTest.creatTable(tablename, familys);      
                    
            //add record zkb      
            HBaseTest.addRecord(tablename,"zkb","grade","","5");      
            HBaseTest.addRecord(tablename,"zkb","course","","90");      
            HBaseTest.addRecord(tablename,"zkb","course","math","97");      
            HBaseTest.addRecord(tablename,"zkb","course","art","87");      
            //add record  baoniu      
            HBaseTest.addRecord(tablename,"baoniu","grade","","4");      
            HBaseTest.addRecord(tablename,"baoniu","course","math","89");      
                    
            System.out.println("===========get one record========");      
            HBaseTest.getOneRecord(tablename, "zkb");      
                    
            System.out.println("===========show all record========");      
            HBaseTest.getAllRecord(tablename);      
                    
            System.out.println("===========del one record========");      
            HBaseTest.delRecord(tablename, "baoniu");      
            HBaseTest.getAllRecord(tablename);      
                    
            System.out.println("===========show all record========");      
            HBaseTest.getAllRecord(tablename);      
        } catch (Exception e) {      
            e.printStackTrace();      
        }      
    }      
} 

  3 运行前要启动Hadoop和HBase,没问题的话,会打印出如下

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
create table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored zkb to table scores ok.
insert recored baoniu to table scores ok.
insert recored baoniu to table scores ok.
===========get one record========
zkb course: 1416917870482 90
zkb course:art 1416917872071 87
zkb course:math 1416917871719 97
zkb grade: 1416917869799 5
===========show all record========
baoniu course:math 1416917874500 89
baoniu grade: 1416917874139 4
zkb course: 1416917870482 90
zkb course:art 1416917872071 87
zkb course:math 1416917871719 97
zkb grade: 1416917869799 5
===========del one record========
del recored baoniu ok.
zkb course: 1416917870482 90
zkb course:art 1416917872071 87
zkb course:math 1416917871719 97
zkb grade: 1416917869799 5
===========show all record========
zkb course: 1416917870482 90
zkb course:art 1416917872071 87
zkb course:math 1416917871719 97
zkb grade: 1416917869799 5
原文地址:https://www.cnblogs.com/liuchangchun/p/4121874.html