http://blog.csdn.net/zlm838687/article/details/74781522
hdata datax交流總結
今天和阿里雲的同學就數據同步做了簡要的交流,下面就交流的內容做一個總結
分片相關
- datax目前可以支持單機(standalone)和集群模式(cluster).目前開源的是單機版本。無論是單機版本還集群版本,分片都是通過datax進行。集群模式會把分片包裝的taskGroup重新發給datax service, datax service會把新的taskGroup重新發給其他機器執行
- 根據算出的最大值、最小值和通道個數(相當於hdata的線程個數),可以計算出步長(step), 然后根據step,計算出各個分片的長度。
- datax split目前僅支持單一主鍵,且主鍵類型是int或者varchar類型
- 執行reader和writer最細力度的切分。需要注意到是,writer的切分結果要參照readre的結果,要達到切分后的結果數目相等,才能滿足1:1的通道模型。所以這里可以將reader和writer的配置整合到一起。為了避免順序給讀寫帶來的長尾效應,將整合的結果shuffle掉。
- hbase的分片是通過region來實現的
- odps(他們的hadoop環境)是通過offset來實現的
- 分庫分表直接在表的層面划分,各個表之間沒有關系。我們交流的團隊目前是沒有使用canal增量同步數據的
- datax沒有斷點續傳,分布式一個錯,其他都錯。datax如果某一個task失敗會有重試,我們hdata目前還沒有。后面hdata可以改進下,可以減少整個任務重試的成本。
流控
- datax的流控不會出現尖峰的情況。他們內部會把每次sleep的時間調整的很短。具體sleep的時間他們是根據當前流量,超出峰值的流量等因素,根據他們內部算法實現的。我們自己的hdata早前都是固定sleep一秒的, 所以會出現峰值的情況。
- 數據源的流控超過了就不再下發任務
開發平台相關
- 多租戶,主賬號和子賬號,有多個角色(開發,運維,部署,方可,項目管理員),會有測試,預發等。
- SQL的補全是每個輸入會有ajax請求到后端(odps上)做語法分析. odps會根據語法樹找到和用戶最匹配的sql
總結
我們做的好的地方
- datax目前的進度匯報是基於task級別的,但是task級別的進度不能真正反映整個job的進度。我們目前hdata是進程級別的。可以真正的看到這個任務total read write completedPercent的情況
- datax的限流雖然把sleep的間隔調整為毫秒級別,但是個人覺得還是會出現短暫的分值情況。我們目前的限流首先會在數據庫級別做一下限流,降低數據庫的壓力,減少sql killer發送的頻率。還有我們目前限流的算法采用類似tcp擁堵的滑動窗口算法,快速下降慢速恢復。可以將流量控制在一個平穩的數值范圍內。
值的學習借鑒的地方
- hdata的分布式。大概想法是分片還是由hdata完成,然后hdata把分片的結果告訴調度,由調度進行二次分發到不同的hdata機器上進行執行
- hdata可以增加線程級別的重試。減少重跑出錯任務的代價
- 當前hdata支持容忍錯誤的條數,不支持容忍錯誤百分比。后期需要把這個功能坐上。
- hdata的智能分析還不夠強大。當前正在做。
- 數加的測試環境的數據都是讀取線上的數據的,只不過寫出的時候區分線上環境還是測試環境。我們后面做測試環境可以考慮下。
