Eclipe集成環境開發HBase程序過程詳解



Eclipe集成環境開發HBase程序過程詳解

 

當前,爲了方便對TB級以上的數據進行分佈式存取,開發企業級的應用,很多公司採用HBase作爲後臺數據組織與管理平臺。HBase雖然可以存放近乎無限的數據,也可以實現在TB級以上的數據集塞責快速查、改操作,但是對數據操作的難度又不是一般人所能完成的,對其不能像關係數據庫那樣使用SQL語言進行操作,甚至也不能像在Hive中那樣使用類SQL語言對數據進行查詢。HBase提供了統一的接口,專門的命令實現對數據的操作。對於數據庫管理員來說,通過Hbase Shell登錄Hbase,使用專門的命令完成對HBase數據庫的操作是可以的。HBase提供了專門的Java API,可以讓Java程序進行調用,從而實現對Hbase的操作。Eclipse作爲開發Java應用程序的不二之選,使用它開發基於Java語言的Hbase應用程序也成了程序員們的首選。因爲資料的缺乏,或者提供相關資料的人員有意無意的疏漏,從集羣平臺與集成開發環境搭配完畢,到完成第一個Hbase開發,還有很多的事情要做,可能需要花費許多時間才能把路走通。本文將詳細介紹Eclipe集成環境開發HBase程序過程的過程,以期給讀者提供相關的參考,減少在這一過程花費的時間。

1Hadoop集羣環境如下:

15臺服務器,操作系統爲CentOS6.45臺機器的名稱分別爲H-master-01H-node-11H-node-12H-node-13H-node-14IP地址分別爲192.168.100.1192.168.100.11192.168.100.12192.168.100.13192.168.100.14

2Hadoop集羣使用的是Intel公司的IDH2.5。在IDH2.5中,Hadoop版本是1.2.1Hbase的版本是0.94.1

3H-master-01NamenodeJobTrackerHBase Master,其他4臺做DataNodeTaskTrackerHBase RegionServerH-node-11H-node-12H-node-13Zookeeper

2、客戶端開發環境如下:

1)操作系統:Win7

2)開發集成環境:Eclipse 4.21

3JavaSDKJRE 6Build 1.6.0.31

3、開發準備

1)確保集羣HadoopHbase正常運行

2)把集羣上Hbase安裝目錄下的hbase-0.94.11.jarhbase-0.94.11-tests.jar、子目錄Lib下的所有文件、子目錄Security/src/main/java下的org目錄及Hbase-site.xml文件複製到客戶端電腦上。

3)修改客戶端Win7Hosts文件(windows/system32/drivers/etc下),加入集羣各服務器與IP地址的對應關係,使其跟CentOS上的Hosts文件中的對應關係一樣:

192.168.100.1 h-master-01

192.168.100.11 h-node-11

192.168.100.12 h-node-12

192.168.100.13 h-node-13

192.168.100.14 h-node-14

這是由於Hbase是通過hostname解析IP地址的(DNS)Zookeeper只會返回Hbase的域名,需要客戶端通過DNS或本地hosts文件進行服務器域名到IP地址的解析。如果在Hosts文件不指名域名與IP地址的關係,Zookeeper無法解析出作爲ZookeeperIP地址,就會報錯:Will not attempt to authenticate using SASL(無法定位登錄配置)

4、開發過程

1)啓動Eclipse,創建一個普通的Java Application Project,假設名稱爲HbaseTest

2)在HbaseTest項目所在目錄下創建Conf目錄,然後把Hbase-site.xml文件複製到Conf目錄下

3)把前述Security/src/main/java目錄下的org目錄複製到HbaseTest項目的Src目錄下。該目錄下存放的是Hbase開發安全類包,如果不把該類包導入,則會出現錯誤信息:java.lang.ClassNotFoundException:org.apache.hadoop.hbase.ipc.SecureRpcEngine

如果在從官網下載的Hbase中,已經把該安全包封裝在JAR文件hbase-0.94.1-security中,則不用把文件導入,通過第(6)步導入JARs操作把類庫導入也可以。

4)在Eclipse中,找到HbaseTest項目,右單擊,在彈出菜單中選擇Refresh,進行刷新操作,就會發現Conf目錄已經出現在項目列表下。

5HbaseTest項目右單擊—Properties,打開項目Properties窗口:

5)在如上面所示的窗口點擊Add Class Folder…按鈕,在彈出的窗口中選擇Conf目錄,把Conf中的Hbase-site.xml文件加入到項目中,以保證程序能夠讀取Hbase配置信息,實現對Hbase的操作。

6)上面的窗口中,點擊Add External JARs…按鈕,選擇前述從Hbase中複製出的Lib目錄下的Jar文件。如果不能確定具體要選哪些文件,選擇全部即可。陸嘉恆在《Hadoop實戰》(第二版)、風的王子在其CSDN博客中都有關於具體引用Jar的文件的說明。比如風的王子在其博客http://blog.csdn.net/zcwfengbingdongguke/article/details/14101433提到:

A、只需要用 java api HBase表進行增刪改時,必須用的以下 jar包:

commons-configuration-1.6.jar

commons-lang-2.5.jar

commons-logging-1.1.1.jar

hadoop-core-1.2.1.jar

hbase-0.94.10.jar

log4j-1.2.16.jar

protobuf-java-2.4.0a.jar

slf4j-api-1.4.3.jar

slf4j-log4j12-1.4.3.jar

zookeeper-3.4.5.jar

B、運行 HBase MapReduce程序時,需要以下jar包:

commons-configuration-1.6.jar

commons-lang-2.5.jar

commons-logging-1.1.1.jar

guava-11.0.2.jar

hadoop-core-1.2.1.jar

hbase-0.94.10.jar

jackson-core-asl-1.8.8.jar

jackson-mapper-asl-1.8.8.jar

log4j-1.2.16.jar

protobuf-java-2.4.0a.jar

slf4j-api-1.4.3.jar

slf4j-log4j12-1.4.3.jar

zookeeper-3.4.5.jar

7)經過上述配置後,就可以直接創建Java Class文件了,把下面的代碼複製到所創建的類文件中,如果沒有引用錯誤,在類文件上,右單擊,Run As—Java Application,如果客戶開發電腦跟運行HbaseHadoop集羣在網絡上是聯通的,則可以在Hbase上創建表MyFirstHbaseTable

importjava.io.IOException;

importjava.util.ArrayList;

importjava.util.List;

 

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.hbase.HBaseConfiguration;

importorg.apache.hadoop.hbase.HColumnDescriptor;

importorg.apache.hadoop.hbase.HTableDescriptor;

importorg.apache.hadoop.hbase.KeyValue;

importorg.apache.hadoop.hbase.MasterNotRunningException;

importorg.apache.hadoop.hbase.ZooKeeperConnectionException;

importorg.apache.hadoop.hbase.client.Delete;

importorg.apache.hadoop.hbase.client.Get;

importorg.apache.hadoop.hbase.client.HBaseAdmin;

importorg.apache.hadoop.hbase.client.HTable;

importorg.apache.hadoop.hbase.client.Put;

importorg.apache.hadoop.hbase.client.Result;

importorg.apache.hadoop.hbase.client.ResultScanner;

importorg.apache.hadoop.hbase.client.Scan;

importorg.apache.hadoop.hbase.filter.Filter;

importorg.apache.hadoop.hbase.filter.FilterList;

importorg.apache.hadoop.hbase.filter.SingleColumnValueFilter;

importorg.apache.hadoop.hbase.filter.CompareFilter.CompareOp;

importorg.apache.hadoop.hbase.util.Bytes;

 

publicclass TableInHbase { 

   public static Configuration configuration;

   static {

       configuration = HBaseConfiguration.create();

       }

 Private static string tableName=” MyFirstHbaseTable”;

 public static void main(String[] args) {

        System.out.println("Initing for HBaseAdmin ......");

       try {      

          tableName=””;   

           HBaseAdmin hBaseAdmin =new HBaseAdmin(configuration);

           System.out.println("start to check tables ......");

           if (hBaseAdmin.tableExists(tableName)) {

               hBaseAdmin.disableTable(tableName);

               hBaseAdmin.deleteTable(tableName);

               System.out.println(tableName + " is exist,detele....");

           }

           System.out.println("start create table ......");

           HTableDescriptor tableDescriptor =newHTableDescriptor(tableName);

           tableDescriptor.addFamily(new HColumnDescriptor("column1"));

           tableDescriptor.addFamily(new HColumnDescriptor("column2"));

           tableDescriptor.addFamily(new HColumnDescriptor("column3"));

           hBaseAdmin.createTable(tableDescriptor);

           hBaseAdmin.close();

       }catch (MasterNotRunningException e) {

           e.printStackTrace();

       }catch (ZooKeeperConnectionException e) {

           e.printStackTrace();

       }catch(IOException e) {

           e.printStackTrace();

       }

       System.out.println("end create table ......");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章