这个问题发生在当您使用Sqoop将RDS数据导入EMR的时候。

问题症状

当您遇到如下场景的时候:
  • 您有一个云数据库RDS数据源,数据表名字为Test_Table,表中包含时间戳(timestamp)字段,结构和数据如下。
    data source
  • 您通过以下脚本将Test_Table里的数据导入到HDFS。
    sqoop import \
    --connect jdbc:mysql://rm-2ze****341.mysql.rds.aliyuncs.com:3306/s***o_sqoopp_db \
    --username s***o \
    --password ****** \
    --table play_evolutions \
    --target-dir /user/hadoop/output \
    --delete-target-dir \
    --direct \
    --split-by id \
    --fields-terminated-by '|' \
    -m 1
  • 您在阿里云E-MapReduce上查询导入结果。
查询结果显示,源数据的时间字段显示延迟8小时。

解决办法

经过大量脚本测试,在使用timestamp字段时,导入命令中去掉--direct参数执行。
sqoop import \
--connect jdbc:mysql://rm-2ze****341.mysql.rds.aliyuncs.com:3306/s***o_sqoopp_db \
--username s***o \
--password ****** \
--table play_evolutions \
--target-dir /user/hadoop/output \
--delete-target-dir \
--split-by id \
--fields-terminated-by '|' \
-m 1
查询结果,这时结果是正常的。
Result