什么是正确的方式来执行增量"全有或全无"以sqoop进口?

时间:2016-06-17 06:14:53

标签: sqoop

根据Sqoop user guide,为了执行“全有或全无”"加载到RDMS中,可以使用临时表。

但是,此选项似乎仅在导出中可用。执行导入(从SQLServer)到HDFS时,不存在选项--staging-table。默认情况下,Sqoop导入使用read committed transaction isolation策略。如果其中一个导入映射器失败怎么办?如果我执行的导入是增量导入,则sqoop将执行"回滚"整个操作,以便不导入任何数据?

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

exportimport彼此接近 - 从源RDBMS导入复制数据,并且能够利用关系数据库的复杂锁定来确保数据的一致状态为它是读。 HDFS没有这样的保证(据我所知),但至少Sqoop可以确定它从RDBMS复制的内容已经完全使HDFS完整无缺。

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