sqoop優化
batch
語法:--batch,指示使用批處理模式執行底層的SQL語句。在導出數據時,該參數能夠將相關的SQL語句組合在一起批量執行,也可以使用有效的API在JDBC接口中配置批處理參數
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基於主鍵列分隔 工作單元。