5

我正在使用 sqoop 1.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>

当我尝试使用元连接 url 创建一个 sqoop 作业时,它无法连接到配置的 mysql 数据库。

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)

sqoop 1.4.2 是否支持 hsql db 以外的元存储?

请建议。

4

3 回答 3

6

答案是肯定的,就我而言,我使用的是 PostgreSQL。我最近遇到了这个问题,我使用的是 1.4.4 版。我不确定我所做的是否是推荐的方式,但它确实有效。这是我遵循的步骤

  1. 在 sqoop-site.xml 中,我将其配置为连接到我的数据库的字符串、用户名和密码。

  2. 在数据库中创建了以下对象,因为 Sqoop 失败了。

    CREATE TABLE SQOOP_ROOT ( version INT, propname VARCHAR(128) NOT NULL, propval VARCHAR(256), CONSTRAINT SQOOP_ROOT_unq UNIQUE (version, propname) );

  3. 插入了以下行(这似乎是您的脚本失败的原因)

    INSERT INTO SQOOP_ROOT VALUES( NULL, 'sqoop.hsqldb.job.storage.version', '0' );

我认为正确的方法可能是下载源代码,并 org.apache.sqoop.metastore.JobStorage与您一起扩展数据库实现。

于 2014-07-23T13:53:42.617 回答
2

Sqoop Metastore 不支持除 hsqldb 之外的任何其他数据库。链接上的第 2 点注释。 云时代

于 2015-05-05T10:05:01.757 回答
1

公益公告:其他 DB 上的 Sqoop Metastore 可能会失败

我们已经能够让 PostgreSQL 和 MySQL 作为 Sqoop 1 上 Sqoop Metastore 的目标,取代 HyperSQL 数据库。需要对数据库进行一些设置和播种,但从那时起,一切似乎都很好。

然而,当我们运行许多 sqoop 作业时,我们会看到同时更新元存储的情况——sqoop 1.4.6 没有代码来捕获和处理由于并发问题而导致增量更新的元存储更新失败的情况。特别是,Sqoop _将成功完成它的导入,但不会使用最近导入的值更新元存储。这将导致下一次增量运行将导入重复数据。Sqoop 将返回一个非零返回码,但 Hadoop 或 Metastore 中的数据需要在之后进行同步才能使数据正确。

我们不确定是否有解决方案,但这是@SandeerKumar 答案的扩展。这也可能是 HyperSQL 的一个问题,但由于 HSQL 位于内存中,所以它的可能性要小得多,因此速度更快。

于 2017-08-11T19:18:21.700 回答