再說一萬次我也不閒煩, 如果我身份證的父親欄是寫"鍋台名", 我還會晚上不睡覺在研究Hbase怎麼跟Eclipse連接起來嗎?
寫這篇網誌跟上一篇中間過程已經先作掉"動物園管理員"了,這有空再補上去吧。我為啥要補這篇先呢?因為Google了整晚,把手邊可以參考的兩本書翻爛了,就是搞不定"KeeperErrorCode = ConnectionLoss for /hbase/master"這一個Exception。當看到console不再跑紅字並且連通的瞬間我眼淚都差點要噴出來了,所以再爆肝我都要先把熱騰騰的記憶寫上來,雖然這篇篇幅不長, 還是讓我們繼續看下去吧。
環境
跟上一篇一樣。
實作
Client端要與Hbase叢集互動,有幾種方式可以選擇:Java, Arvo, REST, Thrift。是的,在下只會Java。Hbase的資料庫是建立在HDFS上的,還記得hbase-site.xml有個屬性的value是hdfs://UD1204:9000/hbase嗎?待會可以從程式執行成功後可以從Eclipse裡或是terminal中看到。
待會要實作的就類似JDBC, 透過JAVA CODE存取資料庫, Hbase也有提供這樣的API,不過詳述底層API不是本篇的主旨,而是要利用Eclipse跟Hbase作連接,使JAVA CODE可以直接存取在HDFS中的Hbase資料庫。
首先要把Hbase相關的lib都add到project裡面,見下圖。
Project按右鍵-->Build Path-->Configuration Build Path..-->Libraries-->Add External JARs.. 路徑選到${HBASE_HOME}/lib,把全部的jar檔都加進去, 再回到${HBASE_HOME}下還有兩個jar檔別忘記了。
接下來的重頭戲就是要把Hbase的設定檔也加入Eclipse,不然執行程式時會連接不到你的master。步驟就是Project按右鍵-->Build Path-->Configuration Build Path..-->Libraries-->Add Variable..(跟上面加入jar的步驟一樣)
到了下面這畫面選擇Configure Variables..再選擇NEW, 會跳出一個對話框, 這就是要讓你加入Hbase設定檔的路徑,請見下圖。
這對話框的Name隨便你取, Path指定到${HBASE_HOME}/bin就好了
按下OKOKOKOKOKOKOK......以上設定就結束了,下面用一個Create Table的程式馬來測試一下。至於API就不詳述如何使用, 改天(我搞清楚的那一天XD)再另外開一篇blog說明吧。
以下這段code貼到eclipse中,記得hadoop跟hbase都要啟動, 再run as hadoop。
console中會出現Table: ex1TableExisted. 1. create table :ex1Table這段字就代表新增成功。至於上面有些紅色的錯誤訊息,我還在研究那是啥原因跑出來的。
import java.io.IOException;
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.client.HBaseAdmin;
import org.apache.hadoop.util.GenericOptionsParser;
public class CreateTable {
public static void createHBaseTable(String tablename, String family)
throws IOException {
// HTableDescriptor 用來描述table的屬性
HTableDescriptor htd = new HTableDescriptor(tablename);
// HTableDescriptor 透過 add() 方法來加入Column family
htd.addFamily(new HColumnDescriptor(family));
// HBaseConfiguration 能接收 hbase-site.xml 的設定值
Configuration conf = HBaseConfiguration.create();
// 檔案的操作則使用 HBaseAdmin
HBaseAdmin admin = new HBaseAdmin(conf);
// 檢查
if (admin.tableExists(tablename)) {
System.out.println("Table: " + tablename + "Existed.");
} else {
// 建立
admin.createTable(htd);
//
System.out.println( tablename + " created.");
}
}
static public void main(String argv[]) throws IOException {
// eclipse only
String[] args = {"ex1Table","Detail"};
argv = args;
String[] otherArgs = new GenericOptionsParser(new Configuration(), argv)
.getRemainingArgs();
if (otherArgs.length < 2) {
System.out.println("CreateTable <newTableName> <Family>");
return;
}
String tablename = otherArgs[0];
String family = otherArgs[1];
createHBaseTable(tablename, family);
System.out.println("1. create table :" + tablename);
}
}
執行完後你可以再Eclipse左邊的視景窗看到這一個table已經產生在hdfs中了。
再來也可以從terminal進到hbase去看table存不存在, 用hbase shell進入再下list指令你可以看到這個table的名字'ex1Table',見下圖。
以上就是Hbase連接Eclipse的方法,我只有做新增Table,也可以利用其他api對DB作存取,改天有空再寫詳細一點, Over。
沒有留言:
張貼留言