2013-07-15 2 views
0

J'ai un petit cluster HBase en cours d'exécution avec un frontend Java. Je l'ai fait fonctionner avec succès avec le code de test qui établit une connexion, exécute des données de test, et se déconnecte, mais je dois l'étendre dans une application Web dans le cadre d'un projet plus vaste. Il a été suggéré que j'utilise Tomcat comme service HTTP pour l'interface avec la base de données, et dans ce cadre j'ai besoin de mettre en place un pool de connexion. Je comprends les pools de connexions au niveau conceptuel (une pile de connexions persistantes à la base de données distribuée aux clients si nécessaire et retournée au pool lorsqu'elle est supprimée), mais je n'ai jamais écrit de webapp auparavant et Tomcat me vexe . Je peux trouver beaucoup de documentation sur comment configurer un pool de connexion à un serveur SQL en utilisant JDBC, mais rien sur HBase (ou, d'ailleurs, quoi que ce soit MAIS SQL) et rien sur comment (ou si je peux ou dois) écrire un interface personnalisée pour le faire fonctionner avec Tomcat. Est-ce faisable, ou même possible, ou devrais-je adopter une approche différente?Pool de connexions HBase dans Tomcat?

Répondre

0

Je pense qu'il serait difficile de trouver quelque chose qui est fait pour Tomcat, je ne pense pas qu'une telle chose existe. La plupart des gens utilisent probablement des classes personnalisées. Cela étant dit, vous devriez probablement construire quelque chose autour du HTablePool qui vient avec HBase.

Voici un exemple de quelque chose que vous pouvez utiliser dans votre projet:

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); 
    } 
} 

Et vous pouvez l'utiliser comme ceci:

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

Ici aussi je cant't trouver une raison, pourquoi la La méthode close reutrns la table dans le pool, Voir: http://stackoverflow.com/questions/12190826/hbase-htablepool-correct-usage/17712233#17712233 – seb

+0

Lire le javadoc http://hbase.apache.org/apidocs /org/apache/hadoop/hbase/client/HTablePool.html –

Questions connexes