本文以HBase 0.90.2为例,介绍如何在Windows系统,Eclipse IDE集成环境下,使用Java语言,进行HBase客户端编程,包含创建表、删除表、插入记录、删除记录、各类方式下的查询操做等。 java
一、下载后安装jdk包(这里使用的是jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008); ios
二、下载eclipse,解压到本地(这里使用的是eclipse-java-helios-SR2-win32); apache
三、下载HBase包,解压安装包到本地(这里使用的是hbase-0.90.2)。 编程
一、运行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下。 windows
二、按照步骤1中的操做,将本身所链接的HBase的配置文件hbase-site.xml添加到本工程的Classpath中,以下所示为配置文件的一个示例。 eclipse
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<configuration>
<property>
<name>hbase.rootdir</name>
</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>
|
三、下面能够在Eclipse环境下进行HBase编程了。 oop
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(); } // 一、建表 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("表建立成功!"); } } // 二、插入数据 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(); } } // 三、删除一行数据 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("删除行成功!"); } // 四、查找一行数据 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()));// 单元格的值 } } // 五、查找所有数据 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(); } } // 六、删除表 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: ui