【问题标题】:Sqoop: Issue with Incremental importSqoop:增量导入问题
【发布时间】:2014-07-21 22:20:44
【问题描述】:

我有一个要求,我需要从 mysql 导入一个表以增量配置配置单元,并且在这样做时遇到了问题。 这是我迄今为止尝试过的:

  1. 我已经创建了一个作业来使用下面提到的查询导入表。

/sqoop 作业

--create test2 -- import 
--connect jdbc:mysql://URL
--username username 
--password password 
--table mysqlTablename 
--hive-import
--hive-overwrite
--direct 
--incremental lastmodified 
--check-column last_modified_time 
--last-value 0

第一次执行:按预期导入所有内容,最小边界为“0”,最大边界为当前时间。 第二次执行:获取上次运行的所有更改,但旧行被覆盖,只留下上次运行更改的行。

  1. 我删除了 --hive-overwrite 和 --hive-import 选项并使用了“--target-dir”选项。 第一次执行:按预期获取所有内容,最小边界为“0”,最大边界为当前时间,但由于元存储未更新,因此未显示在 Hive 中。 第二次执行:它抛出一个错误,指出作为参数提到的directoty --target-dir 选项已经存在。这在从 HDFS 中删除directoty 后执行,但不能解决目的。

我发现提到这是一个问题,除了将新值放入侧目录并在数据上运行 sqoop 合并以将其展平之外,还没有找到解决方案。我想在 shell 脚本中自动执行此操作,并想知道是否有更好的 处理这种增量更新的方法。

想要检查什么是满足要求的最佳选项,其中我需要导入 mysql 表并根据具有最后修改时间戳的列增量更新更改到 hive。 即根据 mysql 中的更改创建、更新或删除 Hive 表中的行以保持同步。

非常感谢您对此的任何帮助。

问候 罗希特

【问题讨论】:

    标签: mysql hadoop sqoop


    【解决方案1】:

    基于 hive 的系统很难处理涉及记录更新的增量负载。这个link 会提供很多可行的解决方案。

    【讨论】:

      【解决方案2】:

      使用append 命令而不是lastmodified 来持续获取更新。

      例如:

      --create test2 -- import 
      --connect jdbc:mysql://URL
      --username username 
      --password password 
      --table mysqlTablename 
      --hive-import
      --direct 
      --incremental append 
      --check-column last_modified_time 
      --last-value "0"
      

      【讨论】:

        猜你喜欢
        • 2016-03-27
        • 2015-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-23
        • 2018-01-17
        • 1970-01-01
        相关资源
        最近更新 更多