我们如何在SQOOP中自动增量导入?

Dev*_*ash 4 hadoop mapreduce sqoop

我们如何在SQoop中自动化增量导入?

在增量导入中,我们需要--last-value从最后一个值开始导入,但我的工作是经常从RDBMS导入,我不想手动给出最后一个值,有什么方法可以自动化这个过程吗?

K S*_*hin 5

@Durga Viswanath Gadiraju的另一种方法回答.

如果要将数据导入配置单元表,则可以从配置单元表中查询上次更新的值,并将该值传递给sqoop导入查询.您可以使用shell脚本或oozie操作来实现此目的.

Shell脚本:

lastupdatedvalue=`hive -e 'select last_value from table` #tweak the selection query based on the logic.

sqoop import --connect jdbc:mysql://localhost:3306/ydb --table yloc --username root -P --incremental append --last-value ${lastupdatedvalue}
Run Code Online (Sandbox Code Playgroud)

Oozie方法:

  1. 基于逻辑的选择查询的Hive操作,以检索上次更新的值.
  2. 从先前的配置单元操作的捕获输出中增加负载的Sqoop操作.

PFB sudo工作流​​程:

<workflow-app name="sqoop-to-hive" xmlns="uri:oozie:workflow:0.4">
<start to="hiveact"/>
<action name="hiveact">
    <hive xmlns="uri:oozie:hive-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <configuration>
            <property>
                <name>mapred.job.queue.name</name>
                <value>${queueName}</value>
            </property>
        </configuration>
        <script>script.sql</script>
<capture-output/>
    </hive>    
    <ok to="sqoopact"/>
    <error to="kill"/>

<action name="sqoopact">
    <sqoop xmlns="uri:oozie:sqoop-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <command>import --connect jdbc:mysql://localhost:3306/ydb --table yloc --username root -P --incremental append --last-value ${wf:actionData('hiveact')}</command>
     </sqoop>
    <ok to="end"/>
    <error to="kill"/>
</action>
<kill name="kill">
    <message>Action failed</message>
</kill>
<end name="end"/>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.