Sqoop - 导出前无法清空临时表

时间:2018-03-22 14:22:02

标签: mysql hadoop mapreduce hdfs sqoop

在尝试将数据从HDFS导出到MySQL数据库时,我遇到了一个有趣的情况。我在导出期间收到错误:导出运行前无法清空登台表。

首先我在MySQL中创建了两个表,并且第一次执行了Sqoop导出语句(当两个表都为空时)。

结果,登台表中的记录成功迁移到导出表:

INFO manager.SqlManager: Migrated 81424802 records from `staging_weather_data` to `export_weather_data`

然而,当我在export_weather_data表(SELECT count(*) FROM export_weather_data;上执行SELECT查询时 ) - 它返回了0条记录。 如果记录成功迁移,表格如何保持为空?

至于staging_weather_data表 - 它包含导出的记录。

所以我决定用相同的声明重试Sqoop导出:

sqoop export \
--connect jdbc:mysql://localhost/weather_data \
--connection-manager org.apache.sqoop.manager.MySQLManager \
--table export_weather_data \
--staging-table staging_weather_data \
--clear-staging-table \
--export-dir /user/maria_dev/input-sqoop \
--options-file ~/.access_credentials \
--num-mappers 4 \
--batch \
--input-fields-terminated-by ','

之后我不断收到以下错误:

INFO mapreduce.ExportJobBase: Beginning export of export_weather_data
18/03/22 13:28:57 ERROR manager.SqlManager: Unable to execute delete query: DELETE FROM `staging_weather_data`
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
ERROR tool.ExportTool: Error during export: Failed to empty staging table before export run

我唯一可以怀疑的是缺少--clear-staging-table属性,但我从一开始就在声明中说过。所以现在我不知道如何解决它并需要任何建议。

0 个答案:

没有答案