首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sqoop中执行增量“全有或全无”导入的正确方法是什么?

在sqoop中执行增量“全有或全无”导入的正确方法是什么?
EN

Stack Overflow用户
提问于 2016-06-17 14:14:53
回答 1查看 449关注 0票数 1

根据Sqoop user guide的说法,为了对RDMS执行“全有或全无”加载,可以使用临时表。

但是,此选项似乎仅在导出中可用。在执行(从SQLServer)到HDFS的导入时,选项--staging-table不存在。默认情况下,Sqoop导入使用read committed事务隔离策略。如果其中一个导入映射器失败了怎么办?如果我正在执行的导入是增量导入,sqoop是否会执行整个操作的“回滚”,从而不导入任何数据?

我们已经实现了一个工作流,该工作流通过临时HDFS目录从SQL表执行增量导入,然后,如果一切正常,则对“主”HDFS表执行合并,其中包含以前导入的所有数据。这基本上是一个手工制作的进口临时表。这是正确/有效的继续进行的方式吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-06-19 10:05:30

如果sqoop import失败,例如,如果其中一个映射器hadoop的max.retries次数仍然失败,则整个sqoop导入将失败并显示错误。我怀疑正在写入的表(在HDFS中)将是不完整的,可能需要删除,但您可以从错误中知道,对吧?

exportimport几乎完全相反-- import从源关系数据库复制数据,并且能够利用关系数据库的复杂锁定来确保数据在读取时的一致状态。HDFS没有这样的保证(据我所知),但至少Sqoop可以确保它从RDBMS复制的内容完好无损地复制到HDFS。

但是当进行另一个方向(export)时,Sqoop所知道的就是它对HDFS的读取是否无错误地完成,但没有并发或其他RDBMS的保护。因此,export选项建议使用临时表作为一种机制,以确保所有数据都成功地位于RDBMS位置,之后Sqoop可以使用从staging到最终结果的RDBMS副本,以确保一致性、锁定等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37874382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档