
# 在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：表示HBase表名。
 
