1.报错信息

Hive修复分区数据报错:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask (state=08S01,code=1)。

2.分析原因

查看HiveServer日志/var/log/Bigdata/hive/hiveserver/hive.log,发现目录名不符合分区格式。
zh-cn_image_0000001107893654.png

3.解决办法

  • 方法一:删除错误的文件或目录。
  • 方法二:执行set hive.msck.path.validation=skip,跳过无效的目录。
  • 方法三:set hive.msck.path.validation=ignore;忽略不符合要求的分区目录格式

    4.知识点

    MSCK REPAIR TABLE命令主要是用来解决通过hdfs dfs -put或者hdfs api写入hive分区表的数据在hive中无法被查询到数据的问题。
    hive metastore要是存储一些元数据信息,比如数据库名,表名或者表的分区等等信息。如果不是通过hive的insert等插入语句,很多分区信息在metastore中是没有的,如果插入分区数据量很多的话,你用 ALTER TABLE table_name ADD PARTITION 一个个分区添加十分麻烦。
    这时候MSCK REPAIR TABLE就派上用场了。只需要运行MSCK REPAIR TABLE命令,hive就会去检测这个表在hdfs上的文件,把没有写入metastore的分区信息写入metastore。