IT技术博客大学习 共学习 共进步

HBase Java客户端编程

量子数科院 2011-07-24 14:59:57 浏览 2,783 次

   本文以HBase 0.90.2为例,介绍如何在Windows系统,Eclipse IDE集成环境下,使用Java语言,进行HBase客户端编程,包含建立表、删除表、插入记录、删除记录、各种方式下的查询操作等。

1. 准备工作

   1、下载后安装jdk包(这里使用的是jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008);

   2、下载eclipse,解压到本地(这里使用的是eclipse-java-helios-SR2-win32);

   3、下载HBase包,解压安装包到本地(这里使用的是hbase-0.90.2)。

2. 搭建开发环境

   1、运行Eclipse,创建一个新的Java工程“HBaseClient”,右键项目根目录,选择“Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解压后根目录下的hbase-0.90.2.jar、hbase-0.90.2-tests.jar和lib子目录下所有jar包添加到本工程的Classpath下,如图1所示。

   

   图1 Eclilse IDE下添加HBase的Jar包

   2、按照步骤1中的操作,将自己所连接的HBase的配置文件hbase-site.xml添加到本工程的Classpath中,如下所示为配置文件的一个示例。

hbase.rootdirhdfs://dw74.kgb.sqa.cm4:9000/hbasehbase.cluster.distributedtruehbase.zookeeper.quorum10.232.98.74,10.232.98.75,10.232.98.76,10.232.98.77,10.232.98.78hbase.defaults.for.version0.90.2

   3、下面可以在Eclipse环境下进行HBase编程了。

3. HBase基本操作代码示例

3.1 初始化配置

   private static Configuration conf = null;
/**
 * 初始化配置
 */
static {
    conf = HBaseConfiguration.create();
}

3.2 创建表

/**
 * 创建表操作
 * @throws IOException
 */
public 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("表创建成功!");
    }
}

3.3 删除表

   <

         /**
 * 删除表操作
 * @param tablename
 * @throws IOException
 */
public 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();
    } catch (ZooKeeperConnectionException e) {
        e.printStackTrace();
    }
}

3.4 插入一行记录

/**
 * 插入一行记录
 * @param tablename
 * @param cfs
 */
public 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();
    }
}

3.5 删除一行记录

/**
 * 删除一行记录
 * @param tablename
 * @param rowkey
 * @throws IOException
 */
public 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(list);
    System.out.println("删除行成功!");
}

3.6 查找一行记录

/**
 * 查找一行记录
 * @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()));
    }
}

3.7 查询表中所有行

/**
 * 查询表中所有行
 * @param tablename
 */
public 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();
    }
}

建议继续学习

  1. HBase集群出现NotServingRegionException问题的排查及解决方法 (阅读 17,123)
  2. HFile存储格式 (阅读 15,822)
  3. hbase运维 (阅读 14,783)
  4. hbase介绍 (阅读 12,225)
  5. HBase技术介绍 (阅读 7,943)
  6. HBase随机写以及随机读性能测试 (阅读 7,424)
  7. HBase性能优化方法总结 (阅读 6,944)
  8. HBase二级索引与Join (阅读 6,861)
  9. HBase Thrift 接口使用注意事项 (阅读 6,602)
  10. Cassandra和HBase主要设计思路对比 (阅读 4,945)