Sqoop併發控制及相關問題

一、控制參數

Sqoop 可以通過以下參數控制併發讀取的 Mapper 個數加快讀取速度。

sqoop import -m <mapper_num> --split-by pk
或者
sqoop import --num-mappers <mapper_num> --split-by pk

Sqoop 計算每個 Mapper 讀取的數據範圍的時候,會遵循很簡單的公式計算:

range = (max(pk) - min(pk)) / mapper

然後會把max、min之間的區間平均分爲mapper分,最後mapper個並行的map去找數據庫,導數據就正式開始啦!

如果不指定–split-by,默認是主鍵,Sqoop當前無法在多列索引上拆分。如果您的表沒有索引列,或者具有多列鍵,那麼您還必須手動選擇一個拆分列,拆分列爲null的行不會導入

二、問題

sqoop數據傾斜
如果主鍵不連續出現大幅度跳躍,就會導致 Sqoop 導入的時候出現嚴重的數據傾斜。比如某張表的主鍵分佈是這樣的:

1
2
3
...
1000
1001
100000
100001

幾乎出現所有的數據 load 都集中在第一個 mapper 上,整體同步相當於沒有併發。

解決:
1.可以手動split-by指定一個分佈均勻number列,但是number爲null的數據不會導入,優選選擇非空的number列
2.將row_num添加到現有的表模式中並創建一個實體化視圖。split-by指定爲row_num,數據將平均分配到了映射器中。
3.給業務表添加自增列ID

相關鏈接
http://abhinaysandeboina.blogspot.com/2017/08/avoiding-data-skew-in-sqoop.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章