2011-02-03 25 views
5

¿Cuál es la forma más rápida de verificar si existe una tabla Hbase? En cuanto a esta API:Compruebe si existe tabla

http://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html Cuál de estos es el más rápido:

  1. tableExists
  2. isTableEnabled
  3. isTableAvailable
  4. listTables

Con # 4 se obtiene la lista de toda la mesa s e iterar a través de él y comparar si una de esas tablas coincide con el nombre de su tabla.

¿O hay otra manera más inteligente?

+0

Puede probarlo usted mismo, ¿no? –

+0

@Matt Ball lo hice, y lleva más de unos minutos ... por eso estoy buscando la manera más rápida/más rápida. – ant

Respuesta

1

El uso de HBaseAdmin.tableExists solo toma alrededor de 500ms para verificar si la tabla existe. Solo tenemos dos nodos en nuestro clúster, por lo que puede depender del tamaño de su clúster, pero no parece irracionalmente lento.

0

Puede intentar abrir un HTable en la tabla y (creo) arrojará una excepción/error (no funciona aún y no puede hacer una prueba rápida) si la tabla no existe.

No es 100% esto funcionará, solo una idea fuera de la cabeza. :)

3
HBaseAdmin hba = new HBaseAdmin(hbaseTemplate.getConfiguration()); 
    if (hba.tableExists(tableName) == false) { 

     HTableDescriptor tableDescriptor = new HTableDescriptor(tableName); 
     HColumnDescriptor columnDescriptor = new HColumnDescriptor(columnFamilyProfile); 
     tableDescriptor.addFamily(columnDescriptor); 

     hba.createTable(tableDescriptor); 
    } 
3

Aquí está mi código de muestra. (Scala)

import org.apache.hadoop.hbase.HBaseConfiguration 

var TableName = "sample" 
val conf = HBaseConfiguration.create() 
var hbaseAdmin = new HBaseAdmin(conf) 
if (!hbaseAdmin.tableExists(TableName)) { 
    println(TableName + " Does Not Exist") 
} 

Aquí, sólo tiene que utilizar "tableExists" para comprobar si existe este NombreTabla.