Выполнение Sqoops с использованием Oozie

у меня есть 2 Sqoops, который загружает данные из HDFS в MySQL. Я хочу выполнить их с помощью Oozie. Я видел, что Oozie-это XML-файл. Как я могу настроить его, чтобы я мог выполнить эти Sqoop? Демонстрация с шагами будет оценена?

два Sqoops являются:

1.

sqoop export --connect jdbc:mysql://localhost/hduser --table foo1 -m 1 --export-dir /user/cloudera/bar1

2.

sqoop export --connect jdbc:mysql://localhost/hduser --table foo2 -m 1 --export-dir /user/cloudera/bar2

спасибо.

2 ответов


вам не нужно выполнять его с помощью действия оболочки. Существует отдельное действие sqoop в oozie. Вот что вы должны включить в свой рабочий процесс.в XML

<workflow-app xmlns="uri:oozie:workflow:0.4" name="oozie-wf">
    <start to="sqoop-wf1"/>
    <action name="sqoop-wf1">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
                <job-tracker>${jobTracker}</job-tracker>
                <name-node>${nameNode}</name-node>
                <command>export --connect jdbc:mysql://localhost/hduser --table foo1 -m 1 --export-dir /user/cloudera/bar1</command>
        </sqoop>
        <ok to="sqoop-wf2"/>
        <error to="fail"/>
    </action> 
    <action name="sqoop-wf2">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
                <job-tracker>${jobTracker}</job-tracker>
                <name-node>${nameNode}</name-node>
                <command>export --connect jdbc:mysql://localhost/hduser --table foo1 -m 1 --export-dir /user/cloudera/bar2</command>
        </sqoop>
        <ok to="end"/>
        <error to="fail"/>
    </action> 
    <kill name="fail">
        <message>Failed, Error Message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

надеюсь, что это помогает..


можно использовать Oozie shell action для этого. В основном вам нужно создать действие оболочки и предоставить команды, которые вы разместили в своем вопросе, как команды, которые будут выполняться в действии

пример действия Oozie:

 <action name="SqoopAction">
    <shell xmlns="uri:oozie:shell-action:0.1">
        <job-tracker>[JOB-TRACKER]</job-tracker>
        <name-node>[NAME-NODE]</name-node>
        <prepare>
           <delete path="[PATH]"/>
           ...
           <mkdir path="[PATH]"/>
           ...
        </prepare>
        <job-xml>[SHELL SETTINGS FILE]</job-xml>
        <configuration>
            <property>
                <name>[PROPERTY-NAME]</name>
                <value>[PROPERTY-VALUE]</value>
            </property>
            ...
        </configuration>
        <exec>[SHELL-COMMAND]</exec>
        <argument>[ARG-VALUE]</argument>
            ...
        <argument>[ARG-VALUE]</argument>
        <env-var>[VAR1=VALUE1]</env-var>
           ...
        <env-var>[VARN=VALUEN]</env-var>
        <file>[FILE-PATH]</file>
        ...
        <archive>[FILE-PATH]</archive>
        ...
        <capture-output/>
    </shell>

в вашем случае, вы бы заменить [SHELL-COMMAND] С любой командой Sqoop, которую вы хотите запустить, например:

<exec>sqoop export --connect jdbc:mysql://localhost/hduser --table foo1 -m 1 --export-dir /user/cloudera/bar1</exec>

кроме того, вы можете поместить все свои команды sqoop в сценарий оболочки и вместо этого выполнить этот скрипт. Это лучше, если у вас есть много команд.