检查Hbase表是否存在的最快方法是什么?看看这个api:
http://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/client/HBaseAdmin.html 其中哪一项最快:
使用#4,您将获得所有表的列表并通过它进行迭代,并比较其中一个表是否与您的表名匹配。
还是有另一种更聪明的方式?
答案 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);
}
}
}