我使用的是sqoop1.4.2版本。我正在尝试将sqoop元存储从默认的hsqldb更改为mysql。
我在sqoop-site.xml文件中配置了以下属性。
<property>
<name>sqoop.metastore.client.enable.autoconnect</name>
<value>false</value>
<description>If true, Sqoop will connect to a local metastore
for job management when no other metastore arguments are
provided.
</description>
</property>
<property>
<name>sqoop.metastore.client.autoconnect.url</name>
<value>jdbc:mysql://ip:3206/sqoop?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>sqoop.metastore.client.autoconnect.username</name>
<value>userName</value>
</property>
<property>
<name>sqoop.metastore.client.autoconnect.password</name>
<value>password</value>
</property>
</configuration>
当我尝试使用meta connect url创建sqoop作业时,它无法连接到已配置的mysql db。
sqoop job --create --meta-connect {mysql_jdbc_url} sqoop job defination
它引发以下异常。
14/06/06 15:04:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.4.2.0.6.1-101
14/06/06 15:04:55 WARN hsqldb.HsqldbJobStorage: Could not interpret as a number: null
14/06/06 15:04:55 ERROR hsqldb.HsqldbJobStorage: Can not interpret metadata schema
14/06/06 15:04:55 ERROR hsqldb.HsqldbJobStorage: The metadata schema version is null
14/06/06 15:04:55 ERROR hsqldb.HsqldbJobStorage: The highest version supported is 0
14/06/06 15:04:55 ERROR hsqldb.HsqldbJobStorage: To use this version of Sqoop, you must downgrade your metadata schema.
14/06/06 15:04:55 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:274)
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:222)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:231)
at org.apache.sqoop.Sqoop.main(Sqoop.java:240)
sqoop1.4.2是否支持除hsqldb之外的元存储?
请建议。
3条答案
按热度按时间yyhrrdl81#
公共服务公告:其他数据库上的sqoop元存储可能会失败
我们已经能够让postgresql和mysql作为sqoop1上sqoop元存储的目标,取代hypersql数据库。有一点设置和种子的数据库需要,但从那时起,它似乎很好。
然而,当我们运行许多sqoop作业,同时更新metastore时,我们看到了这样的情况——sqoop1.4.6没有代码来捕获和处理增量更新的metastore更新由于并发问题而失败的情况。特别是,sqoop\u将成功完成导入,但不会用最近导入的值更新元存储。这将导致下一次增量运行将导入重复数据。sqoop将返回一个非零返回代码,但是hadoop或metastore中的数据需要在之后进行同步,以便数据正确。
我们不确定是否有解决方案,但这是@sanderkumar答案的扩展。这可能也是hypersql的一个问题,但可能性要小得多,因为hsql在内存中,所以速度更快。
khbbv19g2#
答案是肯定的,就我而言,我使用的是postgresql。我最近遇到了这个问题,我正在使用1.4.4版本。我不确定我所做的是否是推荐的方法,但它是有效的。以下是我遵循的步骤
在sqoop-site.xml中,我用连接到数据库的字符串、用户名和密码对它进行了配置。
在数据库中创建了以下对象,因为sqoop失败了。
CREATE TABLE SQOOP_ROOT ( version INT, propname VARCHAR(128) NOT NULL, propval VARCHAR(256), CONSTRAINT SQOOP_ROOT_unq UNIQUE (version, propname) );
插入下一行(这似乎是脚本失败的原因)INSERT INTO SQOOP_ROOT VALUES( NULL, 'sqoop.hsqldb.job.storage.version', '0' );
我认为正确的方法可能是下载源代码,并进行扩展org.apache.sqoop.metastore.JobStorage
有了你的db实现。qqrboqgw3#
sqoop metastore不支持hsqldb以外的任何其他数据库。链接上的2点注解。cloudera公司