2015-12-21 72 views
0

据我所知,Sqoop提供了几个方法来处理增加的进口的Apache Sqoop增量导入

追加模式

上次更改模式

上追加模式问题:

  1. 附加模式是否仅支持整数数据类型的检查列?如果我想使用日期或时间戳列,但仍然只想追加到HDFS中已有的数据,该怎么办?

  2. 这种模式是否意味着新数据会附加到现有的HDFS文件,或者它只从源数据库中选择新数据还是两者都选?

  3. 可以说检查列是源表中的id列。在ID列为100的表中已经存在一行。当sqoop导入以最后值为50的附加模式运行时。现在它导入ID> 50的所有行。当再次使用last-值为150,但是这次id值为100的行已更新为200.此行是否也会被拉?

例如:假设有一个表名为customers,其中一条记录如下。第一列是id。

100 ABC XYZ 5000

当Sqoop作业在追加方式和最后一值运行50 ID列,那么它会拉上面的记录。

现在同样的记录被改变,ID也被改变(假设的例子虽然)如下

200 ABC XYZ 6000

如果再次运行sqoop命令,将这个拉上面的记录,以及是个问题。

问题上上次更改模式:

  1. 貌似运行sqoop这种模式将合并使用2个MR内部工作新数据的现有数据。 sqoop用来比较合并过程中的旧和新的列是什么?

  2. 用户可以指定合并过程的列吗?

  3. 是否可以提供必须用于合并过程的多个列?

  4. 对于合并过程是否存在target-dir,以便sqoop将现有目标目录视为旧数据集?否则,Sqoop将如何合并旧数据集?

回答

0

为追加方式回答:

  1. 是的,它必须是整数

  2. 两个

  3. 问题尚不清楚。

的答案为上次更改模式:

  1. 增量负载不合并与上次更改时间数据时,它是使用时间戳主要拉更新和插入的数据。

  2. 合并过程完全不同。一旦拥有旧数据和新数据,您就可以将新数据合并到旧数据到不同的目录中。你可以看到详细的解释here

  3. 合并过程的工作只有一个字段

  4. 目标目录不应该存在。该视频涵盖完整的合并过程

+0

对于追加模式下的Q3,我更新了原始问题。我认为答案还没有。 – learninghuman

+0

我从apache sqoop cookbook中看到这样一条语句:“在内部,上次修改后的增量导入包含两个独立的MapReduce作业,第一个作业将导入类似于正常导入的已更改数据的增量,此导入作业将数据保存在临时目录下的第二个作业将同时采用旧数据和新数据,并将它们合并到最终输出中,只保留每行的最后更新值。“ – learninghuman

+0

找出增量最后修改模式,提供的merge-key与目标目录相同将导致2个MR作业,并且基目录是合并输出。虽然历史丢失了。 – learninghuman