hbase源码分析:ERROR: Table already exists问题诊断

重新安装Hadoop后,HBase表数据丢失但Zookeeper未清除,导致尝试创建表时出现'ERROR: Table already exists!'。通过分析list命令和create命令在服务器端的执行逻辑,发现list命令从HDFS的rootpath下data目录获取表信息,而create命令在检查Zookeeper中表的状态时发现表已存在。通过删除Zookeeper中对应表的记录解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

重新安装了测试环境的hadoop,所以之前hbase所建的表数据都丢失了,但是zookeeper没有动。在hbase shell中list的时候,看不到之前建的表,但是create test table的时候,却报错提示"ERROR: Table already exists: test!". 

问题追踪:

1,在list的时候,没有显示之前建的表,也就是没有感知到之前建的表,但是create时候却感知到了之前建的表,所以很自然需要看一下list和create的时候,server执行的逻辑。只要清楚了这个逻辑,问题便一清二楚了。

2,list时server端的逻辑其实很简单。list的时候master端执行的逻辑的入口函数是listTableDescriptors。核心代码如下:

  

 1         // request for all TableDescriptors
 2         Collection<HTableDescriptor> htds;
 3         if (namespace != null && namespace.length() > 0) {
 4           htds = tableDescriptors.getByNamespace(namespace).values();
 5         } else {
 6           htds = tableDescriptors.getAll().values();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值