检查表是否存在

时间:2011-02-03 15:58:35

标签: java hadoop hbase

检查Hbase表是否存在的最快方法是什么?看看这个api:

http://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html 其中哪一项最快:

  1. tableExists
  2. isTableEnabled
  3. isTableAvailable
  4. listTables
  5. 使用#4,您将获得所有表的列表并通过它进行迭代,并比较其中一个表是否与您的表名匹配。

    还是有另一种更聪明的方式?

5 个答案:

答案 0 :(得分:4)

这是我的示例代码。 (阶)

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

在这里,您只需使用“tableExists”来检查此TableName是否存在。

答案 1 :(得分: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);
    }

答案 2 :(得分:1)

使用HBaseAdmin.tableExists只需要大约500毫秒来检查表是否存在。我们的集群中只有两个节点,因此它可能取决于集群的大小,但它看起来似乎不合理。

答案 3 :(得分:0)

如果表不存在,您可以尝试向表中打开HTable并且(我认为)它会抛出异常/错误(不在工作但不能进行快速测试)

不是100%这会起作用,只是一个不受欢迎的想法。 :)

答案 4 :(得分:0)

每次启动应用程序时,我都必须检查表是否存在。我在一个配置类中做了这个,使用 spring boot

这是代码,希望对您有所帮助。

@Configuration
public class CustomHbaseConfiguration {

@Bean
public Connection hbaseConnection() throws IOException {
    // Create connection
    final org.apache.hadoop.conf.Configuration configuration = HBaseConfiguration.create();

    // Validate that Hbase is available
    HBaseAdmin.available(configuration);

    // return the hbaseConnection Bean
    return ConnectionFactory.createConnection(configuration);
}



@PostConstruct
public void hbaseTableLogic() throws IOException {

    // With the hbaseConnection bean, get the HbaseAdmin instance
    Admin admin = hbaseConnection().getAdmin();

    // The name of my table
    TableName YOUR_TABLE_NAME_HERE = TableName.valueOf("PUT_YOUR_TABLE_NAME_HERE");

    // Check if the table already exists ? else : create table and colum family
    if (!admin.tableExists(YOUR_TABLE_NAME_HERE)) {
        HTableDescriptor hTableDescriptor = new HTableDescriptor(YOUR_TABLE_NAME_HERE);
        hTableDescriptor.addFamily(new HColumnDescriptor("PUT_YOUR_COLUM_FAMILY_HERE"));
        admin.createTable(hTableDescriptor);
    }
}
}