我们如何自动化SQoop中的增量导入?我们如何自动化SQOOP中的增量导入?
在增量导入中,我们需要让--last-value
开始从最后一个值开始导入,但我的工作是经常从RDBMS导入,我不想手动给出最后一个值,有没有办法可以自动执行此过程?
我们如何自动化SQoop中的增量导入?我们如何自动化SQOOP中的增量导入?
在增量导入中,我们需要让--last-value
开始从最后一个值开始导入,但我的工作是经常从RDBMS导入,我不想手动给出最后一个值,有没有办法可以自动执行此过程?
一种方式来获得它:
在数据库中创建日志表,开发增量导入如下
Query the log table using sqoop eval command with the last value from last run
Run the sqoop import
Update the log table with the latest valueusing sqoop eval command
您需要自动化的sqoop eval
,sqoop import
和sqoop eval
过程。您可以使用sqoop eval
向任何具有连接性的数据库提交任何有效查询。因此,您可以在导入前运行select查询以获取上次运行的最后一个值,并运行update query以使用当前运行的最后一个值更新日志表。
@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}
Oozie的方法:
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"/>
希望这有助于。
您可以利用内置的Sqoop metastore
您可以用下面的命令 创建一个简单的增量导入作业:
sqoop工作\ --create <> \ - \ 进口\ --connect <> \ --username <> \ --password <> \ --table <> \ --incremental追加\ --check- <> \ --last值为0
并与--exec参数启动:
sqoop job --exec <<Job Name>>
Sqoop将自动序列化的最后一个进口值回到 每个成功增量作业后的metastore
请详细说明一下..你将如何传递值来导入查询? –