2013-07-15 3 views
0

У меня есть небольшой кластер HBase, работающий с интерфейсом Java. Я успешно работаю с тестовым кодом, который устанавливает соединение, запускает тестовые данные и отключает, но мне нужно расширить его в webapp как часть более крупного проекта. Было высказано предположение, что я использую Tomcat как услугу HTTP для взаимодействия с базой данных, и в качестве части этого мне необходимо настроить пул соединений.Пул соединений HBase в Tomcat?

Я понимаю пулы пулов на концептуальном уровне (куча постоянных подключений к БД, раздаваемых клиентам по мере необходимости и возвращенных в пул при отбрасывании), но я никогда не писал webapp раньше, а Tomcat - это vexxing me , Я могу найти множество документации о том, как настроить пул подключений на сервере SQL, используя JDBC, но ничего не найдено на HBase (или, если на то пошло, что-нибудь BUT 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 –

Смежные вопросы