Sqoop数据导出一致性问题
场景
如Sqoop在导出到Mysql时,使用4个Map任务,过程中有2个任务失败,那此时MySQL中存储了另外两个Map任务导入的数据,此时老板正好看到了这个报表数据。而开发工程师发现任务失败后,会调试问题并最终将全部数据正确的导入MySQL,那后面老板再次看报表数据,发现本次看到的数据与之前的不一致,这在生产环境是不允许的。
解决
官网描述及参数介绍http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html:
Since Sqoop breaks down export process into multiple transactions, it is possible that a failed export job may result in partial data being committed to the database. This can further lead to subsequent jobs failing due to insert collisions in some cases, or lead to duplicated data in others. You can overcome this problem by specifying a staging table via the --staging-table option which acts as an auxiliary table that is used to stage exported data. The staged data is finally moved to the destination table in a single transaction.
使用小例子:
sqoop export --connect jdbc:mysql://192.168.137.10:3306/user_behavior --username root --password 123456 --table app_cource_study_report --columns watch_video_cnt,complete_video_cnt,dt --fields-terminated-by "\t" --export-dir "/user/hive/warehouse/tmp.db/app_cource_study_analysis_${day}" --staging-table app_cource_study_report_tmp --clear-staging-table --input-null-string '\N'
推荐阅读
-
Hive与Oracle之间利用Sqoop进行数据的导入导出时遇到的问题及解决方法
-
SQOOP导出SQLSERVER中数据的方法教程
-
数据一致性问题、缓存雪崩(缓存击穿)及缓存穿透
-
Redis与MySQL数据库一致性问题
-
详解redis缓存与数据库一致性问题解决
-
sqoop导出hive数据到mysql报错:Causedby:java.lang.RuntimeException:Can'tparseinputdata的解决办法
-
Sqoop数据导出导入命令
-
关于php导出淘宝数据包的颜色尺码的销售属性问题
-
SQOOP导出SQLSERVER中数据的方法教程
-
Hive与Oracle之间利用Sqoop进行数据的导入导出时遇到的问题及解决方法