如何从hbase表中删除列族及其存储文件,并保持表的启用?

时间:2016-10-31 11:44:22

标签: java hbase

hbase deleteColumn类的java方法Admin从指定的HBase表中删除指定的列族。 (尽管它的名称该方法删除了系列,而不是列 - 查看HBASE-1989。)实际上是代码

Admin admin = connection.getAdmin();
admin.deleteColumn(tableName, familyByteName);

更改了表的架构,但它不会从文件系统中删除列族的存储文件。我在独立模式和伪分布式模式下用HBase 1.2.3 / 1.0.3观察到这种效应。 hbase-site.xml配置文件中的联机架构更新属性已打开:

  <property>
    <name>hbase.online.schema.update.enable</name>
    <value>true</value>
  </property>

我找到了通过Java API删除列族HFile的唯一方法 - 禁用删除列族前面的表:

Admin admin = connection.getAdmin();
admin.disableTable(tableName);
admin.deleteColumn(tableName, familyByteName);
admin.enableTable(tableName); 

但这不合适,因为该表应该可以永久读写。所以问题是:

  • 出于什么原因,deleteColumn()方法不会从文件系统中删除列族存储文件?
  • 绕过HBase API删除这些文件是否安全:call 首先是admin.deleteColumn(tableName, familyByteName);,然后通过HDFS Java API删除存储文件?
  • 是否可以从hbase表中删除列族,并删除系列的存储文件,并保持表的启用状态?

    PS:这是指向类似question的链接。

  • 0 个答案:

    没有答案