天天看點

大資料開發套件中資料同步-日志報錯復原資訊的一些問題總結

在使用大資料開發套件時最常用的就是資料同步子產品,工單裡最常見的問題就是其中資料同步的問題,這裡總結一些常見一些從maxcompute(原名odps)到其他資料源的同步任務報錯案例,主要是日志中出現資料復原寫入的問題。

那首先看下日志中資料復原的原因,當資料寫入rds或者hybriddb等一些支援事務的資料庫中,資料批量寫入,一旦由于各種原因沒有寫入成功,這個批次的資料會復原重新寫入,如果再次寫入失敗,就會報髒資料的錯誤導緻任務失敗。資料寫入失敗可能是以下原因導緻復原。

1,髒資料(資料值超過資料類型最大範圍,資料類型不對應等等)

2,目标資料源字段設定,比如預設不允許為空

3,主鍵沖突

4,目标資料源本身負載太高,寫入時死鎖

5,同步的設定的速度太大,比如資料量很大,速度設為10m/s。

常見復原日志報錯示例:

下面來看幾個案例

<b></b>

案例一: maxcompute到hybriddb的資料同步任務報錯,錯誤提示:

問題定位:

有資料復原操作,初步定位為資料在hybriddb寫入失敗,復原寫入失敗,出現髒資料大于使用者設定的0條。任務終止。

問題排查:

看到日志中出現下面報錯:

大資料開發套件中資料同步-日志報錯復原資訊的一些問題總結

排檢視到日志中有顯眼的一句:

 那麼問題基本定位到:是因為hybriddb這邊表出現死鎖,資料寫不進去,報髒資料,任務失敗。

導緻hybriddb死鎖的原因可能是這個表的負載很大,排查一下使用者配置:同步速率設定的10m/s,那就非常有可能是這個速度和使用者的資料量太大,寫入負載太高導緻死鎖。

大資料開發套件中資料同步-日志報錯復原資訊的一些問題總結

解決方法:根據自己資料量和需求設定同步速度,這個案例建議使用者調小一些同步速率,錯開高峰,把任務放到低谷時期執行。

案例二:目标資料庫設定字段不能為空,資料中有null值,同步報錯:

大資料開發套件中資料同步-日志報錯復原資訊的一些問題總結

問題定位:報錯顯示目标資料庫中的有些字段設定的是cannot be null,而資料中有null值。導緻失敗

解決方案:修改目标資料庫中的字段設定,如果此字段必須不能為空,核對下資料來源保證不能為空,或者對資料預處理一下null值。

案例三:資料同步到rds時,maxcompute中有重複資料,rds中設定主鍵,導緻主鍵沖突。

大資料開發套件中資料同步-日志報錯復原資訊的一些問題總結

問題定位:日志中有復原寫入操作,報錯提示 detail: key (id)=(2022080640) already exists.可以定位是主鍵沖突了,

原因是rds中設定主鍵的這個字段在maxcompute中存在重複,并不是唯一值。

解決方案:

1,建議重建立一張沒有主鍵的表。

2,如果要主鍵,選擇maxcompute中有唯一限制的字段。

3,業務上允許的話,可以先對maxcompute中的資料進行去重再同步。

案例四:資料同步到rds,rds端字段資料類型設定太小。

大資料開發套件中資料同步-日志報錯復原資訊的一些問題總結

原因定位:資料同時出現復原,報錯:java.sql.batchupdateexception: data truncation: data too long for column 'flash' at row 1

maxcompute中的資料字段值,超出rds表中設定的資料類型的門檻值,導緻寫入失敗。

解決方案:去rds中調大這個字段的對應資料類型值

總結:資料同步任務涉及多種資料源,問題類型也是比較多。那從日志中排查報錯是比較常見的方式。本文就羅列了一些maxcompute到其他資料庫的一些常見典型的案例,有不足的地方希望讀者聯系我指出來。

文章作者:上單