问题描述
MySQL 中原始数据有 790W+ 的记录数,在 Sqoop 抽取作业成功的情况下在 Hive 中只有 500W 左右的记录数。
排查过程
数据导入脚本 Log
通过 Log 可以发现以下信息:
该 Sqoop 任务被分解为 4 个 MapTask。
MapTask 执行期间有异常,是网络异常导致 MySQL 连接不成功。
Sqoop 任务对应的 MR 执行过程中总的被调起 9 个 MapTask,其中 3 个失败、2 个被 kill,理论上剩余的 4 个 MapTask 是成功执行的。
Sqoop 导入对应的 MR 只有 MapTask,且 MapTask 的数据记录数为 790W+。所以,单纯看 MR 的输出是正常的。
Sqoop 导入完成后,紧跟着有一个读取 Sqoop 目标表数据的 insert overwrite 的操作。该操作只被分解为 2 个 MapTask,说明原数据文件只有两个块。
根据以上信息说明 Sqoop 之后确实只生成了 2 个数据文件,有两个文件丢失了。
详细原始 Log 信息见附件:Sqoop 执行日志
查看 Sqoop 任务对应 MR 的执行日志
根据上面的 Log 中的信息,从 HDFS 上查找对应的日志。Yarn 所有的应用执行日志在 HDFS 的 /data/hadoop/yarn-logs/hadoop/logs/ 目录下。从该目录下查找应用程序 application_1533196506314_4460157 的日志。日志会包含 MR 在各个节点上执行的信息。
从 Log 中发现以下异常信息:
2018-12-10 00:42:30,595 FATAL [IPC Server han