答案是肯定的,就我而言,我使用的是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。
org.apache.sqoop.metastore.JobStorage
Sqoop Metastore不支持其他hsqldb数据库。链接上的2个注释点。 Cloudera的
的 公共服务公告:其他数据库上的Sqoop Metastore可能会失败 强>
我们已经能够使PostgreSQL和MySQL在Sqoop 1上作为Sqoop Metastore的目标,取代HyperSQL数据库。需要对数据库进行一些设置和播种,但从那时起,它似乎很好。
的 然而 强> 我们看到的情况是,当我们运行许多sqoop作业,同时更新Metastore时 - sqoop 1.4.6没有代码来捕获和处理由于并发问题导致增量更新的Metastore更新失败的情况。特别是,Sqoop _will会成功完成导入,但不会使用最近导入的值更新Metastore。这将导致 的 下一次增量运行将导入重复数据 强> 。 Sqoop将返回非零返回码,但是之后需要同步Hadoop或Metastore中的数据才能使数据正确。
我们不确定是否有解决方案,但这是@SandeerKumar答案的扩展。这也可能是HyperSQL的一个问题,但由于HSQL在内存中,因此速度更快。