背景
Hive表由于负载过高或者异常退出等原因,导致表中的orc文件损坏,影响表正常读取。此博客记录了Hive表异常orc文件的定位和故障排除步骤。
检查分区是否存在损坏的orc文件
使用select count(1)
语句逐个测试partition目录中是否存在损坏的orc表。但Hive默认在count时使用统计信息不读取orc文件。因此需要先配置Hive不使用统计信息。
配置Hive查询不使用统计信息的方法为:
set hive.compute.query.using.stats=false;
配置完毕后执行:
select count(1) from table_name where partition_col='xxx';
逐个测试有潜在问题的分区。如果出现报错,说明该分区下可能有损坏的orc文件。
检查具体哪个orc文件损坏
找到疑似存在损坏orc文件的分区目录之后,执行如下命令查看orc文件数据内容:
hive --orcfiledump -d hdfs:///...
-d
参数允许传入目录名。可以检测目录下的所有orc文件。如果出现报错,说明该orc文件存在问题。报错中会给出存在问题的orc文件路径。
也可以使用:
hive --orcfiledump hdfs:///...
查看orc文件统计信息,stripe信息等。
修复损坏的orc文件
找到损坏的orc文件后,执行:
hive --service orcfiledump --recover hdfs:///...
尝试修复该orc文件。
如果orc文件无法修复,可将该orc文件移动到其他目录备份。这种修复方式会丢失一部分数据。
修复或者清理分区中所有损坏的orc文件之后,分区的查询操作可恢复正常。
参考材料
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC
网友评论