2016-01-13 84 views
2

我們如何自動化SQoop中的增量導入?我們如何自動化SQOOP中的增量導入?

在增量導入中,我們需要讓--last-value開始從最後一個值開始導入,但我的工作是經常從RDBMS導入,我不想手動給出最後一個值,有沒有辦法可以自動執行此過程?

回答

0

一種方式來獲得它:

在數據庫中創建日誌表,開發增量導入如下

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 evalsqoop importsqoop eval過程。您可以使用sqoop eval向任何具有連接性的數據庫提交任何有效查詢。因此,您可以在導入前運行select查詢以獲取上次運行的最後一個值,並運行update query以使用當前運行的最後一個值更新日誌表。

3

@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的方法:

  1. 蜂巢行動的基礎上檢索 最後更新值的邏輯選擇查詢。
  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"/> 

希望這有助於。

+0

請詳細說明一下..你將如何傳遞值來導入查詢? –

2

您可以利用內置的Sqoop metastore

您可以用下面的命令 創建一個簡單的增量導入作業:

sqoop工作\ --create <> \ - \ 進口\ --connect <> \ --username <> \ --password <> \ --table <> \ --incremental追加\ --check- <> \ --last值爲0

並與--exec參數啓動:

sqoop job --exec <<Job Name>> 

Sqoop將自動序列化的最後一個進口值回到 每個成功增量作業後的metastore