2013-07-15 167 views
0

我有一個小型的HBase羣集,前臺運行着Java。我已經成功地使用建立連接,運行測試數據和斷開連接的測試代碼,但我需要將它作爲更大項目的一部分擴展到Web應用程序。有人建議我使用Tomcat作爲HTTP服務來與數據庫接口,並且作爲此部分,我需要建立一個連接池。Tomcat中的HBase連接池?

我理解概念級別的連接池(根據需要將一堆持久連接分發給客戶端,並在丟棄時返回池),但我從未寫過web應用程序,並且Tomcat讓我煩惱。我能找到的文檔的負荷就如何建立一個連接池使用JDBC一個SQL服務器,但沒有對HBase(或者,就此而言,任何事情,但SQL),並沒有對如何(或者我是否可以或應該)寫自定義界面,以使其與Tomcat一起工作。這是可行的,甚至可能的,還是我應該採取不同的方法?

回答

0

我認爲這將很難找到爲Tomcat製作的東西,我不認爲這樣的東西存在。大多數人可能使用自定義類。話雖如此,你應該圍繞HTablePool建立一個HBase

這裏的東西,你可以在你的項目中使用的例子:

public class HTableManager { 

    public static int HTABLE_POOL_SIZE = 15; 

    private static HTableManager instance; 
    private static HTablePool hTablePool; 

    /** 
    * Private Constructor 
    */ 
    private HTableManager() { 
     try { 
      Configuration config = HBaseConfiguration.create(); 
      config.set("hbase.defaults.for.version.skip", "false"); 

      hTablePool = new HTablePool(config, HTABLE_POOL_SIZE); 
     } catch (IOException ex) { 
      // Error handling 
     } 
    } 

    /** 
    * @return The HbaseTableManager instance 
    */ 
    public static HTableManager getInstance() { 
     if (instance == null) { 
      instance = new HTableManager(); 
     } 
     return instance; 
    } 

    /** 
    * Method used to retrieve a HTable instance. 
    * 
    * @param tableName The table name 
    * @return The HTableInterface instance 
    * @throws IOException 
    */ 
    public synchronized HTableInterface getHTable(String tableName) throws IOException { 
     return hTablePool.getTable(tableName); 
    } 
} 

然後你就可以使用它像這樣:

HTableManager hTableManager = htableManager.getInstance(); 
HTableInterface hTable = hTableManager.getHTable("yourTableName"); 
... 
// Work with the hTable instance 
... 
// A call to the close method returns it to the pool 
hTable.close(); 
+0

而且,這裏我cant't找到一個理由,爲什麼close方法reutrns表中池,請參見:http://stackoverflow.com/questions/12190826/hbase-htablepool-correct-usage/17712233#17712233 – seb

+0

閱讀的javadoc http://hbase.apache.org/apidocs /org/apache/hadoop/hbase/client/HTablePool.html –