问题描述:
hive执行INSERT OVERWRITE TABLE操作时在最后阶段任务出现报错:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask. MetaException(message:Exception thrown when executing query : SELECT DISTINCT 'org.apache.hadoop.hive.metastore.model.MPartition' AS `NUCLEUS_TYPE`,`A0`.`CREATE_TIME`,`A0`.`LAST_ACCESS_TIME`,`A0`.`PART_NAME`,`A0`.`PART_ID` FROM `PARTITIONS` `A0` LEFT OUTER JOIN `TBLS` `B0` ON `A0`.`TBL_ID` = `B0`.`TBL_ID` LEFT OUTER JOIN `DBS` `C0` ON `B0`.`DB_ID` = `C0`.`DB_ID` WHERE `B0`.`TBL_NAME` = ? AND `C0`.`NAME` = ? AND `A0`.`PART_NAME` = ?)
日志查看:
查看对应的yarn上面的日志出现的报错提示为:
Can not initialize counter due to context is not a instance of TaskInputOutputContext, but is org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl
问题分析:
##查看到出现prov_id=0登录失败(0)的信息。怀疑最后阶段插入数据时来源表异常。
问题解决:
##通过分组统计来源表各prov_id字段的数值,确实发现来源表出现两条异常记录;即来源表出现问题,需要重入来源表数据
问题总结:
原因:
partition字段出现异常字符导致的报错,即分区不支持中文;(hive分区支持中文设置可参考先前博客: hive设置中文字符utf-8
根本原因:
源表字段值和输出分区值之间的关系是根据位置,而不是命名来匹配的。