这是在保存增量导入状态时得到的。
16/05/15 21:43:05 INFO tool.ImportTool: Saving incremental import state to the metastore
16/05/15 21:43:56 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Error communicating with database
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.createInternal(HsqldbJobStorage.java:426)
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.update(HsqldbJobStorage.java:445)
at org.apache.sqoop.tool.ImportTool.saveIncrementalState(ImportTool.java:164)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:518)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
at org.apache.sqoop.tool.JobTool.execJob(JobTool.java:228)
at org.apache.sqoop.tool.JobTool.run(JobTool.java:283)
at org.apache.sqoop.Sqoop.run(Sqoop.java:148)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:184)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:226)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:235)
at org.apache.sqoop.Sqoop.main(Sqoop.java:244)
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2333)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2318)
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.setV0Property(HsqldbJobStorage.java:707)
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.createInternal(HsqldbJobStorage.java:391)
... 12 more 我已经将默认的亚稳态改为MySQL。其他的一切都很顺利。据我所知,一些消息来源说sqoop不支持它。在这种情况下,我还需要知道我需要在-元参数中指定的默认的HSQL url是什么?
在sqoop site.xml中,我看到它是:
jdbc:hsqldb:file:/tmp/sqoop-meta/meta.db;shutdown=true但是我要指定什么是元连接呢?我相信这一点并没有具体说明。
我需要显式地指定元连接,因为我是通过oozie运行作业的,所以需要指定元连接。
我已经检查过又检查过了,但是端口16000没有运行。sqoop-亚瑟尔命令当然可以启动它,但在这种情况下,它不是作为服务运行的。
所以,我要问的是一种将sqoop亚稳态作为服务运行的方法,或者需要知道为什么在为mysql配置时,这种状态不能存储在亚稳状态中。
发布于 2016-05-17 11:13:04
发布于 2017-01-13 15:07:01
今天MySQL遇到了同样的问题,并找出了原因。
Sqoop通过在同一个进程中使用不同的jdbc连接来锁定自己。默认情况下,MariaDB (MySQL)使用INNODB引擎创建表,该引擎引入事务.我想没人用INNODB测试过Sqoop。
我所做的就是在亚稳态中重新创建SQOOP_SESSIONS表,并使用MyISAM引擎。
CREATE TABLE `SQOOP_SESSIONS_n` (
`job_name` varchar(64) NOT NULL,
`propname` varchar(128) NOT NULL,
`propval` varchar(1024) DEFAULT NULL,
`propclass` varchar(32) NOT NULL,
UNIQUE KEY `SQOOP_SESSIONS_n_unq` (`job_name`,`propname`,`propclass`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
drop table SQOOP_SESSIONS;
rename table SQOOP_SESSIONS_n to SQOOP_SESSIONS;当然,如果你有工作机会的话,你也不会想失去你创造的工作。只需在删除表之前复制它们:
insert into SQOOP_SESSIONS_n select * from SQOOP_SESSIONS;发布于 2016-05-16 04:12:14
看起来您的错误在mySQL方面。原因: java.sql.SQLException:超过了锁等待超时;尝试重新启动事务
您能发送用于运行此命令的完整命令吗?
在MySQL中检查以下内容:-显示引擎innodb \G
您应该考虑通过设置InnoDB (默认为50秒)来增加innodb_lock_wait_timeout的锁等待超时值。
显示诸如‘innodb_lock_wait_timeout’这样的变量;
可以使用以下行在/etc/my.cnf中将其永久设置为更高的值
innodb_lock_wait_timeout=120并重新启动mysql。
如果此时无法重新启动mysql,请运行以下命令:
设置全局innodb_lock_wait_timeout = 120;您也可以在会话期间设置它
设置innodb_lock_wait_timeout = 120;
https://stackoverflow.com/questions/37242857
复制相似问题