sqoop優化


sqoop優化

batch

語法:--batch,指示使用批處理模式執行底層的SQL語句。在導出數據時,該參數能夠將相關的SQL語句組合在一起批量執行,也可以使用有效的APIJDBC接口中配置批處理參數

Dsqoop.export.records.per.statement

指定批處理數據條數,可和batch聯合使用

boundary-query

可解決數據傾斜問題

boundary-query: select 1 as MIN , sum(1) as MAX from table where xxx

具體原理就是通過ROWNUM() 生成一個嚴格均勻分布的字段,然后指定為分割字段

指定導入數據的范圍值。當僅使用split-by參數指定的分隔列不是最優時,可以使用boundary-query參數指定任意返回兩個數字列的查詢。它的語法如下:--boundary-

query select min(id), max(id) from<tablename>。在配置boundary-query參數時,查詢語句中必須連同表名一起指定min(id)max(id)。如果沒有配置該參數,默認時Sqoop使用select

min(<split-by>), max(<split-by>) from<tablename>查詢找出分隔列的邊界值。

fetch-size

導入數據時,指示每次從數據庫讀取的記錄數。使用下面的語法:--fetch-size=<n>,其中<n>表示Sqoop每次必須取回的記錄數,默認值為1000。可以基於讀取的數據

量、可用的內存和帶寬大小適當增加fetch-size的值。某些情況下這可以提升25%的性能。

num-mappers

該參數的語法為--num-mappers <number ofmap tasks>,用於指定並行數據導入的map任務數,默認值為4。應該將該值設置成低於數據庫所支持的最大連接數。

split-by

該參數的語法為--split-by <column name>,指定用於Sqoop分隔工作單元的列名,不能與--autoreset-to-one-mapper選項一起使用。如果不指定列名,Sqoop基於主鍵列分隔 工作單元。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM