Eclipse HBase Java 客户端编程

本文介绍如何在Windows系统上使用Eclipse IDE进行HBase客户端Java编程,包括搭建开发环境、基本操作代码示例等,涉及表的创建、删除、记录的插入、删除及查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文以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、在HBaseClient工程下创建一个文件夹,可以命名为Conf,去Hbase的配置文件夹内将hbase-site.xml拷贝,粘贴至你所创建的Conf文件夹中。右击工程,Properties,Java Build Path, Libraries, Add Class Folder,勾选出Conf,将自己所连接的HBase的配置文件hbase-site.xml添加到本工程的Classpath中,如下所示为配置文件的一个示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
< configuration >
< property >
< name >hbase.rootdir</ name >
< value >hdfs://hostname:9000/hbase</ value >
</ property >
< property >
< name >hbase.cluster.distributed</ name >
< value >true</ value >
</ property >
< property >
< name >hbase.zookeeper.quorum</ name >
< value >*.*.*.*, *.*.*.*, *.*.*.*</ value >
</ property >
< property skipInDoc = "true" >
< name >hbase.defaults.for.version</ name >
< value >0.90.2</ value >
</ property >
</ configuration >

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

3. HBase基本操作代码示例

3.1 初始化配置

1
2
3
4
5
6
7
private static Configuration conf = null ;
/**
  * 初始化配置
  */
static {
     conf = HBaseConfiguration.create();
}

3.2 创建表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
  * 创建表操作
  * @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 删除表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
  * 删除表操作
  * @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 插入一行记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
  * 插入一行记录
  * @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 删除一行记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
  * 删除一行记录
  * @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 查找一行记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
  * 查找一行记录
  * @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 查询表中所有行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
  * 查询表中所有行
  * @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();
     }
}
 
4. 一个小例子

package org.apache.test;

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 HBaseBasic {
  
    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", "192.168.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 = "student";
   String[] familys = {"id", "name","score"};
   //HBaseBasic.creatTable(tablename, familys);
   
   //add record zkb
   //HBaseBasic.addRecord(tablename,"2","id","","095832");
   //HBaseBasic.addRecord(tablename,"2","name","","zmac");
   //HBaseBasic.addRecord(tablename,"2","score","math","97");
   //HBaseBasic.addRecord(tablename,"2","score","chinese","87");
   //HBaseBasic.addRecord(tablename,"2","score","english","85");
   //add record  baoniu
   
   System.out.println("===========get one record========");
   HBaseBasic.getOneRecord(tablename, "2");
   
   System.out.println("===========show all record========");
   HBaseBasic.getAllRecord(tablename);
   
   System.out.println("===========del one record========");
   HBaseBasic.delRecord(tablename, "2");
   HBaseBasic.getAllRecord(tablename);
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
运行会,你将看到首先创建数据库student,其字段为id,name,score{english,math,chinese},然后向该数据表插入数据,再查询记录,删除记录等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值