将参数传递给sqoop作业

时间:2015-03-05 14:22:09

标签: hadoop hive sqoop

我正在为Oozie安排一个sqoop工作,以便将每日数据加载到Hive中。

我想基于Date作为参数对hive进行增量加载,这将被传递给sqoop作业

经过研究,我无法找到将参数传递给Sqoop作业的方法

2 个答案:

答案 0 :(得分:5)

您可以将日期分为两个阶段来完成此操作:

  1. 工作流协调员
  2. 在您的协调员中,您可以将日期传递给它作为<property>执行的工作流程,如下所示:

    <coordinator-app name="schedule" frequency="${coord:days(1)}"
                     start="2015-01-01T00:00Z" end="2025-01-01T00:00Z"
                     timezone="Etc/UTC" xmlns="uri:oozie:coordinator:0.2">
        ...
        <action>
            <workflow>
                <app-path>${nameNode}/your/workflow.xml</app-path>
                <configuration>
                    <property>
                        <name>workflow_date</name>
                        <value>${coord:formatTime(coord:nominalTime(), 'yyyyMMdd')}</value>
                    </property>
                </configuration>
            </workflow>
        </action>
        ...
    </coordinator-app>
    
    1. Sqoop的工作流程
    2. 在您的工作流程中,您可以使用${workflow_date}变量在Sqoop调用中引用该属性,如下所示:

      <sqoop xmlns="uri:oozie:sqoop-action:0.2">
          ...
          <command>import --connect jdbc:connect:string:here --table tablename --target-dir /your/import/dir/${workflow_date}/ -m 1</command>
          ...
      </sqoop>
      

答案 1 :(得分:2)

以下解决方案来自Apache Sqoop Cookbook。

保留最后导入的值

<强>问题

增量导入是您经常使用的一项很棒的功能。承担记住最后一次进口价值的责任正变得麻烦。

<强>解决方案

您可以利用内置的Sqoop Metastore,它允许您保存所有参数以供以后重复使用。您可以使用以下命令创建简单的增量导入作业:

sqoop job \
--create visits 3.3. Preserving the Last Imported Value | 27
-- import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table visits \
--incremental append \
--check-column id \
--last-value 0

然后使用--exec parameter

启动它
sqoop job --exec visits

<强>讨论

Sqoop Metastore是Sqoop的一个强大功能,它允许您保留您的工作定义并随时轻松运行它们。每个保存的作业都有一个用于引用的逻辑名称。您可以使用--list参数列出所有保留的作业:

sqoop job --list

您可以删除--delete参数不再需要的旧作业定义,例如:

sqoop job --delete visits

最后,您还可以使用--show parameter查看已保存作业定义的内容,例如:

sqoop job --show visits

--show命令的输出将采用属性的形式。不幸的是,Sqoop目前无法重建您用于创建已保存作业的命令行。

内置Sqoop Metastore最重要的好处是与增量导入相结合。在每次成功增量作业后,Sqoop会自动将最后导入的值序列化回Metastore。这样,用户不需要在每次执行后记住最后导入的值;一切都是自动处理的。