我們如何自動化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
請詳細說明一下..你將如何傳遞值來導入查詢? –