【问题标题】:How to automate sqoop incremental import using sqoop job?如何使用 sqoop 作业自动执行 sqoop 增量导入?
【发布时间】:2017-06-10 19:58:54
【问题描述】:

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

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

这样的 sqoop 作业

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

sqoop 执行我的工作

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

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

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

【问题讨论】:

    标签: hadoop sqoop


    【解决方案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.)

    如果增量数据太大(书签值离current_timestamp太远),在月/日/小时循环中运行sqoop,每次迭代后保存书签。

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

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

    【讨论】:

    • 非常感谢您的详细解释。我接受了一次采访,他们问我为什么不使用 Sqoop 工作而不是按照您解释的方式进行。因为,编写 Sqoop 作业比您上面解释的方式更容易。
    • 希望你顺利通过面试
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你可以创建一个shell脚本来触发sqoop进程,我们可以添加一个条件来检查sqoop作业是否已经存在,通过使用sqoop list --job name,如果退出可以触发保存的作业和如果没有,则创建并触发 sqoop 作业.. 对于调度,您可以创建 cron 作业、oozie 或可以使用诸如 uc4airflowautosys 之类的调度程序...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-27
        • 2017-05-04
        • 2015-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-02
        相关资源
        最近更新 更多