1、
20/10/29 19:23:24 WARN hsqldb.HsqldbJobStorage: Could not interpret as a number: null
20/10/29 19:23:24 ERROR hsqldb.HsqldbJobStorage: Can not interpret metadata schema
20/10/29 19:23:24 ERROR hsqldb.HsqldbJobStorage: The metadata schema version is null
20/10/29 19:23:24 ERROR hsqldb.HsqldbJobStorage: The highest version supported is 0
20/10/29 19:23:24 ERROR hsqldb.HsqldbJobStorage: To use this version of Sqoop, you must downgrade your metadata schema.
20/10/29 19:23:24 ERROR tool.JobTool: I/O error performing job operation: java.io.IOException: Invalid metadata version.
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.init(HsqldbJobStorage.java:202)
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.open(HsqldbJobStorage.java:161)
at org.apache.sqoop.tool.JobTool.run(JobTool.java:289)
at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
at org.apache.sqoop.Sqoop.main(Sqoop.java:252)
解决方法:
sqoop要将memstore切换到mysql中时,要首先在mysql中维护一张SQOOP_ROOT表,而创建这张表有两种方法:
方式1:可以使用sqoop的某一个语句进行连接,这样就可以创建此表
执行如下语句即可
sqoop job --list --meta-connect ‘jdbc:mysql://qianfeng03:3306/sqoop?user=root&password=@Mm123123’
执行后,SQOOP_ROOT表创建成功,但是会报上面的错误,不影响,然后在SQOOP_ROOT表中添加这样一条数据就可以正常运行了
insert into SQOOP_ROOT values (NULL, 'sqoop.hsqldb.job.storage.version', '0');
方式2)手动维护此表
CREATE TABLE SQOOP_ROOT
(
version
int(11) DEFAULT NULL,
propname
varchar(128) NOT NULL,
propval
varchar(256) DEFAULT NULL,
UNIQUE KEY SQOOP_ROOT_unq
(version
,propname
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
手动维护也要添加上面的语句,要不然也会报错。
2、
如果报以下
ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException
java.lang.NullPointerException
at org.json.JSONObject.(JSONObject.java:144)
需要将java-json.jar包导入到sqoop的lib目录下
3、
mysql导入到hdfs上时报以下错误:
20/10/29 19:42:45 ERROR tool.ImportTool: Import failed: 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:171)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:541)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:628)
at org.apache.sqoop.tool.JobTool.execJob(JobTool.java:243)
at org.apache.sqoop.tool.JobTool.run(JobTool.java:298)
at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
at org.apache.sqoop.Sqoop.main(Sqoop.java:252)
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2441)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2366)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2350)
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.setV0Property(HsqldbJobStorage.java:707)
at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.createInternal(HsqldbJobStorage.java:391)
... 12 more
解决方法:
修改两张表的存储引擎为myisam(innoDB引擎会引起事务锁超时情况)
alter table SQOOP_ROOT engine=myisam;
alter table SQOOP_SESSIONS engine=myisam;