记一次hive问题解决

执行hive的sql时,进行查询操作,出现了如下的问题:

TExecuteStatementResp(status=TStatus(statusCode=3, infoMessages=['*org.apache.hive.service.cli.HiveSQLException:Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Map 3, vertexId=vertex_1568604586647_0297_2_03, diagnostics=[Vertex vertex_1568604586647_0297_2_03 [Map 3] killed/failed due to:ROOT_INPUT_INIT_FAILURE, 
Vertex Input: a initializer failed, vertex=vertex_1568604586647_0297_2_03 [Map 3], 

org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://xxx:8020/apps/hive/warehouse/ods.db/xxx/ppi=20170111

这里只是列出了一个分区,还有很多分区都显示不存在;
根据推测,我们了解到,由于前两天测试环境上面的磁盘空间几乎被占满了,因此被迫删除了一部分的log日志,在不知情的情况下,不小心删除了数据,导致数据不存在的情况;但是我们只是删除了datanode中的hdfs的文件和目录,且这种删除方法不能更新hive的元数据,导致元数据库中仍然显示该分区存在,它就会按照分区的地址到指定的位置去查询数据,这个时候显示对应的目录不存在的情况,并跑出异常;

在这种情况下,有以下两种解决方法:
(1)删除对应的分区
(2)将指定的表删除,然后重建

这里我是采用了第二种方法,因为查看了一下,表中一条数据都没有,因此重建是最好的方式,简单快捷

你可能感兴趣的:(hive)