问题描述
SparkSql有时候在极端情况下会出现数据丢失的情况,比如任务执行到一半被kill掉了,application被重启了,虽然大部分场景下spark都有恢复机制,一旦出了这个问题,就需要想办法吧数据恢复过来~
知识点
- SparkSql本身是通过hive的metastore来管理元数据,通过hdfs来存储数据文件。
- Hdfs文件系统的回收站在“/user/用户名/.Trash/原始路径”目录下,Hdp发行版默认配置过期时间360分钟,也就是6个小时。
恢复过程
- 首先确认回收站中是否有文件,因为spark2.4版本默认的存储路径为/apps/spark/warehourse/tablename,那对应的回收站(假设用户root)为:/usr/root/.Trash/apps/spark/warehouse/tablename。先检查这个目录是否存在。
- 确认spark中只是数据丢失了,还是连元数据也丢失了。
- 假如select count(1) from tablename 如果表不存在,则说明元数据也丢失了,就要想办法先重建这张表,重建后是一张空表,字段要跟之前一致,否则映射不到文件上会报错。
- 假如表存在,结果0,则说明只是数据丢失了,则直接将回收站数据mv到数据目录即可( 建议新手先将数据mv到backup目录,然后尝试恢复,不然如果字段不同,表没建好导致数据二次丢失就麻烦了)。
- 如果是分区表,记得最后要做一下分区修复。
MSCK REPAIR TABLE tableName
本文固定链接:杨晨辉的个人博客 » 记一次Spark/Hive表数据恢复过程
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!