sqoop:增量导入问题

fdbelqdn  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(397)

我有一个需求,其中我需要将一个表从mysql增量导入hive,并且在这样做时遇到了问题。这就是我迄今为止所尝试的:
我已经创建了一个作业来导入带有下面提到的查询的表。
/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”,最大边界为当前时间。第二次执行:从上一次运行的所有更改都会被提取,但是旧的行会被覆盖,只剩下从上一次运行更改的行。
我删除了--hive overwrite和--hive import选项,并使用了“-target dir”选项。第一次执行:按预期获取所有内容,最小边界为“0”,最大边界为当前时间,但不会显示在配置单元中,因为元存储未更新。第二次执行:它抛出一个错误,指出作为参数提到的directy--target dir选项已经存在。这是在从hdfs中删除directy之后执行的,但不能解决问题。
我发现提到这一点是一个问题,除了将新值放入一个侧目录并对数据运行sqoop merge以将其展平之外,还没有找到其他解决方案。我想在shell脚本中实现自动化,并且想知道是否有更好的方法来处理这个增量更新。
我想看看对于我需要导入一个mysql表的需求来说,什么是最好的选择,并基于带有最后修改的时间戳的列将更改增量地更新到配置单元中。i、 e.根据mysql中的更改创建、更新或删除hive表中的行,以保持它们的同步。
在此方面的任何帮助都将不胜感激。
向罗希特致意

iswrvxsc

iswrvxsc1#

使用 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"
2skhul33

2skhul332#

对于基于配置单元的系统来说,处理涉及记录更新的增量负载是非常困难的。这种联系将提供许多可行的解决办法。

相关问题