赞
踩
hdfs块损坏导致hive执行查询、删除问题时报错。
问题1:hive中无法查询表中的数据信息,但是可以展示表结构等信息。
在hive中建立表,显示表信息均显示成功,部分信息如下:
展示表成功:
show tables;
展示表属性成功:
describe test;
插入表数据失败:
insert into test values("hello");
查询的时候也报错,报错信息如下所示:
select* from test;
这可是真的奇怪,冷静下来想想,查看了最开始插入语句的错误信息,发现了以下信息:
即发现在将数据移入hdfs块的时候执行错误,再结合查询结果的错误信息:
发现在查询结果的时候无法找到hdfs块来读取数据,因为我们知道hive的数据实际上最终是存储在hdfs上的。结合以上两点,我推测可能是hdfs上的某些块发生了损坏,基于此思路,我便执行了以下命令来检测hdfs块的具体情况:
hdfs fsck /
在执行的截图中,查找到以下信息:
果然,我们可以看到有五个块因为损坏而丢失了。至此,问题的原因找到了,现在我尝试删除这些损失的块,执行以下命令后,即可对根目录下的损失块进行清理。
hdfs fsck / -delete
查看执行结果:
清理结束后,损坏块就被清理干净了。然后我们再次进入hive执行查询命令:
select* from test ;
OK,查询结果成功返回!这说明了我们保存的数据实际上不位于损失块上,另外一方面,假如hdfs上存在损失的块,也将导致我们的查询和插入操作失败。至此,问题被顺利解决。
小总结:以后发生问题时,我们一定要能够准确定位问题,找到问题发生的本质原因,再根据线索逐步靠近问题,从而解决问题。而仔细查看报错的关键信息,并在此基础之上进行有逻辑性的理性思考,则可以加速我们定位问题,并最终找到解决问题的可行方案。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。