Windows下使用Eclipse基于Java的HBase客户端编程

1. 准备工作

  1. 下载后安装jdk包(1.6+)
  2. 下载eclipse
  3. 下载HBase包,这里使用的是hbase-0.98.2。

2. 搭建开发环境

  1. 运行Eclipse,创建一个新的Java工程“HBaseClient”,右键项目根目录,选择 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解压后根目录下的lib子目录下所有jar 包添加到本工程的Classpath下。
  2. 按照步骤1中的操作,将自己所连接的HBase的配置文件hbase-site.xml添加到本工程的Classpath中,如下所示为配置文件的一个示例:
<configuration>  
<property>  
<name>hbase.rootdir</name>  
<value>hdfs://myhostname:8020/hbase</value>  
</property>  
<property>  
<name>hbase.cluster.distributed</name>  
<value>true</value>  
</property>  
<property>  
<name>hbase.zookeeper.quorum</name>  
<value>192.168.1.20</value> 
</property> 
<property> 
<name>hbase.zookeeper.property.clientPort</name> 
<value>2181</value> 
</property>  
</configuration>
Windows下HBase客户端操作HBase服务器端时,需要在%WINDOWS_HOME%\System32\drivers\etc\hosts下绑定HBase使用Zookeeper主机名称,比如
在http://cos2:60010/master.jsp页面看到了

Zookeeper Quorum cos2:2181

那么,Windows系统下的hosts文件中需要出现 
192.168.1.20 cos2

这行。其中cos2 为hbase运行的zookeeper服务器名称。

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.valueOf(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();  
    }  
}  


转载于:https://my.oschina.net/u/1377774/blog/264653

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值