本文以Hbase-0.92.0為例,介紹如何在Windows系統(tǒng),Eclipse IDE集成環(huán)境下,使用Java語言,進行HBase客戶端編程,包含建立表、刪除表、插入記錄、刪除記錄、各種方式下的查詢操作等。
1. 準備工作
1、下載后安裝jdk包;
2、下載eclipse,解壓到本地;
3、下載HBase包,解壓安裝包到本地(這里使用的是 Hbase-0.92.0)。-
2. 搭建開發(fā)環(huán)境
1、運行Eclipse,創(chuàng)建一個新的Java工程“HBaseClient”,右鍵項目根目錄,選擇 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,將HBase解壓后根目錄下的hbase-0.92.0.jar、hbase-0.92.0-tests.jar和lib子目錄下所有jar 包添加到本工程的Classpath下。
2、按照步驟1中的操作,將自己所連接的HBase的配置文件hbase-site.xml添加到本工程的Classpath中,如下所示為配置文件的一個示例:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://Hadoop-1:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>Hadoop-1,hadoop-2,hadoop-3,hadoop-4</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>60000</value>
</property>
<property>
<name>hbase.master</name>
<value>Hadoop-1:60000</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>21818</value>
</property>
</configuration>
3、下面可以在Eclipse環(huán)境下進行HBase編程了。
3. HBase基本操作代碼示例
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 HBaseTest {
private static Configuration conf =null;
/**
* 初始化配置
*/
static {
conf = HBaseConfiguration.create();
}
/**
* 創(chuàng)建一張表
*/
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()));
}
}
/**
* 顯示所有數(shù)據
*/
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 = "scores";
String[] familys = {"grade", "course"};
HBaseTest.creatTable(tablename, familys);
//add record zkb
HBaseTest.addRecord(tablename,"zkb","grade","","5");
HBaseTest.addRecord(tablename,"zkb","course","","90");
HBaseTest.addRecord(tablename,"zkb","course","math","97");
HBaseTest.addRecord(tablename,"zkb","course","art","87");
//add record baoniu
HBaseTest.addRecord(tablename,"baoniu","grade","","4");
HBaseTest.addRecord(tablename,"baoniu","course","math","89");
System.out.println("===========get one record========");
HBaseTest.getOneRecord(tablename, "zkb");
System.out.println("===========show all record========");
HBaseTest.getAllRecord(tablename);
System.out.println("===========del one record========");
HBaseTest.delRecord(tablename, "baoniu");
HBaseTest.getAllRecord(tablename);
System.out.println("===========show all record========");
HBaseTest.getAllRecord(tablename);
} catch (Exception e) {
e.printStackTrace();
}
}
} 本文出自:億恩科技【mszdt.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|