Hadoop 如何更改sqoop元存储?

Hadoop 如何更改sqoop元存储?,hadoop,hive,bigdata,sqoop,sqoop2,Hadoop,Hive,Bigdata,Sqoop,Sqoop2,我使用的是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

我使用的是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>
它正在抛出以下异常

    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是否支持hsql db以外的元存储


请建议。

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

  • 在sqoop-site.xml中,我配置了连接数据库的字符串、用户名和密码

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

    创建表SQOOP\u根(
    版本INT,
    propname VARCHAR(128)不为空,
    Proval VARCHAR(256),
    约束SQOOP\u ROOT\u unq UNIQUE(版本,propname)
    );

  • 插入以下行(这似乎是脚本失败的原因)

    插入到
    SQOOP_根
    价值观(
    无效的
    'sqoop.hsqldb.job.storage.version',
    '0'
    );

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

    sqoop metastore不支持hsqldb以外的任何其他数据库。链接上的2个注释点。

    公共服务公告:其他DBs上的Sqoop Metastore可能会失败

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

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


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

    它不适用于mysql。sqoop在执行增量导入时未能更新最后一个值。对我有效。请注意,应为配置的用户同时授予数据库和表。有关客户端配置,请参见。
        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)