hbase javaプログラミングインスタンス


HBAseはjava apiを提供してHBAseを一連の管理を行い、テーブルの管理、データの操作などに関連しています.一般的なAPI操作は次のとおりです.
  1、  テーブルの作成、削除、表示、変更などは、HBAseAdminで行うことができます.テーブルが作成されると、HTableのインスタンスでテーブルにアクセスでき、毎回テーブルにデータを追加できます.
  2、  データの挿入
Putオブジェクトを作成します.このPutオブジェクトでは、どの列にデータを追加するか、現在のタイムスタンプの等値を指定し、HTable.put(Put)を呼び出してアクションをコミットできます.子ザルは、Putオブジェクトを作成するときに、Putオブジェクトを構築するときにパラメータとして入力する行(Row)値を指定する必要があります.
  3、  データの取得
データを取得するには、Getオブジェクトを使用します.GetオブジェクトにはPutオブジェクトと同様にいくつかのコンストラクション関数があります.通常、コンストラクション時にロー値が入力され、何行目のデータを取得するかを示し、HTable.get(Get)で呼び出されます.
  4、  各行を参照
テーブル内のローをScanでブラウズし、カラム名、タイムスタンプなどの各ローの情報を得ることができます.Scanはカーソルに相当し、next()で次をブラウズし、HTable.getScanner(Scan)を呼び出してResultScannerオブジェクトを返します.HTable.get(Get)とHTable.getScanner(Scan)はいずれもResultを返します.Resultは
KeyValueのチェーンテーブル.
  5、  削除
Deleteを使用してレコードを削除し、HTable.delete(Delete)を呼び出すことで削除操作を実行します.(注:削除ここは特別です.つまり、削除はすぐにデータをテーブルから削除するわけではありません.)
  6、  ロック
操作中に操作されたローにロックが追加され、取得、削除されますが、ブラウズは実行されません.
  7、  クラスタのアクセス
クライアントコードは、ZooKeeperによって発見クラスタにアクセスします.すなわち、ZooKeeper quorumが使用される場合、関連するクラス(パッケージ)は、クライアントのクラスディレクトリの下にある必要があります.すなわち、クライアントはファイルhbase-site.xmlを見つけなければなりません.
hbase-0.90.3に基づいて記述された完全なコード例を以下に示します.
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.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
 
public class HBaseTest {
    
    private static Configuration conf = null;
     
    /**
     *      
     */
    static {
        Configuration HBASE_CONFIG = new Configuration();
        // hbase/conf/hbase-site.xml hbase.zookeeper.quorum       
        HBASE_CONFIG.set("hbase.zookeeper.quorum", "10.1.1.1");
        // hbase/conf/hbase-site.xml hbase.zookeeper.property.clientPort      
        HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
        conf = HBaseConfiguration.create(HBASE_CONFIG);
    }
    
    /**
     *      
     */
    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();
        }
    }
}

1.プログラムはjarパッケージhbtest.jarにコンパイルする
2.shellスクリプトを書く:(hbtest.sh)
#!/bin/sh

source ~/.bash_profile
export HADOOP_CLASSPATH=/home/liliugen/hadoop-0.20.2/hadoop-core-0.20.2-cdh3u0.jar:/home/liliugen/hbase-0.90.1/hbase-0.90.1-cdh3u0.jar:/home/liliugen/zookeeper-3.3.3/zookeeper-3.3.3.jar

/home/liliugen/hadoop-0.20.2/bin/hadoop jar hbtest.jar hbase.HBaseTest