如何使用sqoop作业自动化sqoop增量导入?

时间:2017-01-25 15:08:39

标签: hadoop sqoop

如何使用sqoop job自动执行sqoop增量导入?

据我所知,sqoop作业会记住最后一个值。 如果我们创建像

这样的sqoop作业

sqoop job --create myjob - import --connect blah blah ..

sqoop exec myjob

并自动执行作业,每次执行时都会创建作业。所以,我们会得到工作已经存在的错误。

那么,是否可以使用sqoop job自动执行sqoop增量导入?

请告诉我你对此的了解。提前致谢。

3 个答案:

答案 0 :(得分:1)

完全控制书签以获得重述的可能性更好。这就是为什么自定义机制优于sqoop作业。

工作流程模板是:

  1. 阅读最新书签。可以存储在一些rdbms(mySQL)或Hadoop / etc中的文件中。如果不存在,可以从目标表中选择书签。例如select max(etl_load_timestamp) from target_table

  2. 将书签条件作为参数传递给sqoop查询,例如将and etl_update_timestamp>$your_bookmark连接到WHERE子句。

  3. 运行sqoop
  4. 保存最新的书签(请参阅1.)
  5. 如果增量数据太大(书签值离current_timestamp太远),请在每月/每日/每小时循环中运行sqoop,在每次迭代后保存书签。

    书签可以是时间戳或某些run_id(源系统etl序列)

    如果您需要重新显示数据(追溯加载),则更新书签和工作流程将从书签开始重新加载数据。

答案 1 :(得分:0)

您只需使用选项文件创建一个sqoop作业,您的作业就会被保存。 下次,当您运行作业时,它将自动获取增量数据。

答案 2 :(得分:0)

您可以创建一个shell脚本来触发sqoop进程,我们可以使用sqoop list --job name,添加一个条件来检查sqoop作业是否已经存在退出可以触发已保存的作业,如果没有,则可以创建并触发sqoop作业。.对于调度,您可以创建cronoozie作业,也可以使用uc4airflow等调度程序,autosys ...