用 Java 对 hbase 进行CRUD增删改查操作

本文以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下。

2、按照步骤1中的操作,将自己所连接的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>
<propertyskipInDoc="true">
<name>hbase.defaults.for.version</name>
<value>0.90.2</value>
</property>
</configuration>

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

3. HBase基本操作代码示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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.Put;
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.util.Bytes;
 
public class CreateTable {
     private static Configuration conf = null ;
     // 初始化配置
     static {
         conf = HBaseConfiguration.create();
     }
 
     // 1、建表
     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++) {
                 // 表建好后,列簇不能动态增加,而列是可以动态增加的,这是hbase伸缩性的一个体现。
                 tableDesc.addFamily( new HColumnDescriptor(cfs[i]));
             }
             admin.createTable(tableDesc);
             System.out.println( "表创建成功!" );
         }
     }
 
     // 2、插入数据
     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_13" )); // 指定列值
                 put.add(Bytes.toBytes(cfs[j]),
                         Bytes.toBytes(String.valueOf( "lie2" )),
                         Bytes.toBytes( "value_24" ));
                 table.put(put);
                 System.out.println( "插入数据成功" );
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
 
     // 3、删除一行数据
     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(list);
         System.out.println( "删除行成功!" );
     }
 
     // 4、查找一行数据
     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())); // 单元格的值
         }
     }
 
     // 5、查找全部数据
     public static void scanerTable(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();
         }
     }
 
     // 6、删除表
     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();
         } catch (ZooKeeperConnectionException e) {
             e.printStackTrace();
         }
     }
 
     public static void main(String[] args) throws IOException {
 
         String[] cfs = "a,b,c" .split( "," );
         // createTable("test01", cfs);
         // writeRow("test01", cfs);
         // deleteRow("test01", "rows1");
         // selectRow("test01", "rows2");
         // scanerTable("test01");
         // deleteTable("test01");
     }
}

REF:

【Hbase】Java对hbase的操作

http://smallwildpig.iteye.com/blog/1695203


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值