您的位置:首页 > 编程语言 > Java开发

Hbase API开发实例(Java版)

2012-02-02 17:40 134 查看
import java.io.IOException;

import java.io.ByteArrayOutputStream;

import java.io.DataOutputStream;

import java.io.ByteArrayInputStream;

import java.io.DataInputStream;

import java.util.Map;

import java.util.ArrayList;

import java.util.List;

import org.apache.hadoop.io.Writable;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.HColumnDescriptor;

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.Delete;

import org.apache.hadoop.hbase.util.*;

import org.apache.hadoop.hbase.KeyValue;

import org.apache.hadoop.hbase.util.Writables;

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.MasterNotRunningException;

//import org.apache.hadoop.hbase.ZooKeeperConnectionException;

public class HBaseHandler {

    private static HBaseConfiguration conf = null;

    /**

     * 初始化配置

     */

    static {

       //conf = HBaseConfiguration.create();

         conf = new HBaseConfiguration();

         conf.addResource("hbase-site.xml");

        

        

    }

    /**

     * @param args

     * @throws IOException

     */

    public static void main(String[] args) throws IOException {

        // TODO Auto-generated method stub

        System.out.println("Helloworld");

        String[] cfs;

        cfs = new String[1];

        cfs[0] = "Hello";

        createTable("Test",cfs);

    }

    

    

    /**

     * 创建表操作

     * @throws IOException

     */

    public static void createTable(String tablename, String[] cfs) throws IOException {

        HBaseAdmin admin = new HBaseAdmin(conf);

        if (admin.tableExists(tablename)) {

            System.out.println("表已经存在!");

        }

        else {

            HTableDescriptor tableDesc = new HTableDescriptor(tablename);

            for (int i = 0; i < cfs.length; i++) {

                tableDesc.addFamily(new HColumnDescriptor(cfs[i]));

            }

            admin.createTable(tableDesc);

            System.out.println("表创建成功!");

        }

    }    

    /**

     * 删除表操作

     * @param tablename

     * @throws IOException

     */

    public static void deleteTable(String tablename) throws IOException

    {

        try {

            HBaseAdmin admin = new HBaseAdmin(conf);

            admin.disableTable(tablename);

            admin.deleteTable(tablename);

            System.out.println("表删除成功!");

        }

        catch (MasterNotRunningException e)

        {

            e.printStackTrace();

        }

    }

    

    /**

     * 插入一行记录

     * @param tablename

     * @param cfs

     */

    public static void writeRow(String tablename, String[] cfs) {

        try {

            HTable table = new HTable(conf, tablename);

            Put put = new Put(Bytes.toBytes("rows1"));

            for (int j = 0; j < cfs.length; j++) {

                put.add(Bytes.toBytes(cfs[j]),

                        Bytes.toBytes(String.valueOf(1)),

                        Bytes.toBytes("value_1"));

                table.put(put);

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    

    /**

     * 删除一行记录

     * @param tablename

     * @param rowkey

     * @throws IOException

     */

    public static void deleteRow(String tablename, String rowkey) throws IOException {

        HTable table = new HTable(conf, tablename);

        List list = new ArrayList();

        Delete d1 = new Delete(rowkey.getBytes());

        list.add(d1);

        table.delete(d1);

        System.out.println("删除行成功!");

    }

    /**

     * 查找一行记录

     * @param tablename

     * @param rowkey

     */

    public static void selectRow(String tablename, String rowKey)

            throws IOException {

        HTable table = new HTable(conf, tablename);

        Get g = new Get(rowKey.getBytes());

        Result rs = table.get(g);

        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()));

        }

    }

    

    

    /**

     * 查询表中所有行

     * @param tablename

     */

    public static void scaner(String tablename) {

        try {

            HTable table = new HTable(conf, tablename);

            Scan s = new Scan();

            ResultScanner rs = table.getScanner(s);

            for (Result r : rs) {

                KeyValue[] kv = r.raw();

                for (int i = 0; i < kv.length; i++) {

                    System.out.print(new String(kv[i].getRow()) + "  ");

                    System.out.print(new String(kv[i].getFamily()) + ":");

                    System.out.print(new String(kv[i].getQualifier()) + "  ");

                    System.out.print(kv[i].getTimestamp() + "  ");

                    System.out.println(new String(kv[i].getValue()));

                }

            }

        } catch (IOException e)

        {

            e.printStackTrace();

        }

    }

    

}

说明:

HBaseConfiguration: 用于告诉client如何连接,连接到哪个HBase的服务器上。

HTable:代表一个HBase表格。

BatchUpdate:用于表格中一行的更新。包括添加某个列,修改某列的值,删除某列等。

commit:table的一个方法。代表某个BatchUpdate操作可以生效了。类似于数据库中的commit操作。

Cell:table中对应某个(行key, 列值,时间戳)下的单元格值。

获取Cell的方法。For example:

table.get("myRow", "myColumnFamily:columnQualifier1");

scanner:用于遍历表格。

rowResult:遍历过程当中保存某行信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息