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