记一次Spark/Hive表数据恢复过程

技术总结 yangchenhui 9818℃ 0评论

问题描述

SparkSql有时候在极端情况下会出现数据丢失的情况,比如任务执行到一半被kill掉了,application被重启了,虽然大部分场景下spark都有恢复机制,一旦出了这个问题,就需要想办法吧数据恢复过来~

知识点

  1. SparkSql本身是通过hive的metastore来管理元数据,通过hdfs来存储数据文件。
  2. Hdfs文件系统的回收站在“/user/用户名/.Trash/原始路径”目录下,Hdp发行版默认配置过期时间360分钟,也就是6个小时。

恢复过程

  1. 首先确认回收站中是否有文件,因为spark2.4版本默认的存储路径为/apps/spark/warehourse/tablename,那对应的回收站(假设用户root)为:/usr/root/.Trash/apps/spark/warehouse/tablename。先检查这个目录是否存在。
  2. 确认spark中只是数据丢失了,还是连元数据也丢失了。
  3. 假如select count(1) from tablename 如果表不存在,则说明元数据也丢失了,就要想办法先重建这张表,重建后是一张空表,字段要跟之前一致,否则映射不到文件上会报错。
  4. 假如表存在,结果0,则说明只是数据丢失了,则直接将回收站数据mv到数据目录即可( 建议新手先将数据mv到backup目录,然后尝试恢复,不然如果字段不同,表没建好导致数据二次丢失就麻烦了)。
  5. 如果是分区表,记得最后要做一下分区修复。
    MSCK REPAIR TABLE tableName

本文固定链接:杨晨辉的个人博客 » 记一次Spark/Hive表数据恢复过程
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址