
# 在HBase连续对同一个表名做删除创建操作时出现创建表异常
#### 问题
在HBase连续对同一个表名做删除创建操作时，可能出现创建表异常。
#### 回答
执行过程：Disable Table \> Drop Table \> Create Table \> Disable Table \> Drop Table \>...
1. 在Disable表时，HMaster会发送RPC请求到RegionServer，RegionServer会将相关Region下线。当RegionServer上的Region关闭所需的时间超过HBase的HMaster等待Region处于RIT状态的超时时间，HMaster会默认该Region下线，实际上该Region可能还处在flush memstore阶段。
2. 发送RPC请求关闭Region之后，HMaster会判断该表的所有Region是否下线，上述[1]的情况下关闭超时也会认为是下线，然后HMaster返回关闭成功。
3. 关闭成功之后，删除表，HBase表对应的数据目录被删掉。
4. 在删除表之后，该数据目录会被还处于flush memstore阶段的Region重新创建。
5. 在创建该表时，将temp目录拷贝到HBase数据目录时，由于HBase数据目录不为空，导致调用HDFS rename接口时，数据目录变为temp目录最后一层追加到HBase的数据目录下，如$rootDir/data/$nameSpace/$tableName/$tableName，那样创建表就会失败。
**解决办法：**
出现该问题时，请检查该表对应的HBase数据目录是否存在，如果存在请将该目录重命名。
HBase数据目录由$rootDir/data/$nameSpace/$tableName组成，例如"hdfs://hacluster/hbase/data/default/TestTable"，其中$rootDir是HBase的根目录，该值通过在"hbase-site.xml"中配置hbase.rootdir.perms得到，data目录是HBase的固定目录，$nameSpace是nameSpace名字，$tableName是表名。
