歷史版本的SmartData(3.0.x~3.5.x)服務存在已知缺陷可能會造成緩存數據出現損壞,導致讀取數據內容發生異常。本文為您介紹缺陷影響,缺陷方案以及缺陷修復流程。

缺陷影響

  • 缺陷影響的組件:打開SmartData數據緩存功能的所有組件。
    重要 如果集群部署了SmartData,但確定不會使用緩存可以忽略本缺陷。

    SmartData支持JindoFS Cache模式JindoFS Block模式兩種緩存模式。

  • 缺陷影響的版本:
    • EMR版本:3.30.x、4.5.x、3.32.x、4.6.x、3.33.x、4.7.x、3.34.x、4.8.x、3.35.x、4.9.x。
    • SmartData版本:3.0.x、3.1.x、3.2.x、3.3.x、3.4.x、3.5.x。
  • 缺陷級別:嚴重,建議修復,概率性發生時會出現數據正確性問題。
  • 缺陷發生現象:如果集群啟用JindoFS Cache模式(即設置數據緩存參數jfs.cache.data-cache.enabletrue)或者使用了JindoFS Block模式(Block模式默認啟用緩存),則數據緩存會出現小概率數據污染的情況,從而導致作業讀取數據時報錯。例如,作業對源數據讀取報數據內容不正確的錯誤(ORC或Parquet文件格式無法解析)或HBase報HFile格式錯誤等。

缺陷修復方案

由于歷史版本緩存損壞問題是由于Storage Service的小文件合并(compaction)流程的缺陷導致,通過修改compaction配置關閉該優化路徑并重啟SmartData服務,即可避免該問題的產生。如果已發生該問題,優先關閉緩存開關及時止損,以消除緩存數據的影響,盡快恢復線上業務;如果您僅啟用了Cache模式,沒用使用Block模式,則可以使用工具對集群全部緩存進行全量清理,徹底格式化緩存系統,從而清除集群中所有可能損壞的緩存塊,清理完成后可以重新啟用緩存。

修復流程

常規修復

如果所在集群尚未發生該問題,則可以通過關閉小文件合并的優化路徑,徹底避免該問題。

  1. 在EMR控制臺SmartData服務頁面,添加自定義配置。
    1. 在SmartData服務的storage配置頁,單擊自定義配置
      storage
    2. 新增配置項對話框中,添加Key為storage.compaction.enable,Value為false的配置項。
      添加配置項
    3. 單擊確定
  2. 重啟Jindo Storage Service。
    1. 在SmartData服務頁面,選擇操作 > 重啟Jindo Storage Service
      重啟服務
    2. 執行集群操作對話框中,輸入執行原因,單擊確定
    3. 確認對話框中,單擊確定

緊急修復

對于已發生該問題的情況,請按以下步驟及時恢復業務,并進行緩存修復:

  1. 該缺陷是緩存數據損壞導致的,通過關閉緩存可以消除緩存數據的影響。在SmartData服務的client配置頁面通過以下配置關閉緩存。
    • 使用Block模式:添加自定義配置項。添加Key為jfs.data-cache.enable,Value為false的配置項。
    • 使用Cache模式:修改參數jfs.cache.data-cache.enable的參數值為false
  2. 重跑相關作業。

    重跑作業后,作業能夠恢復正常,如果仍有問題,則可能不是該文檔所描述的錯誤原因,請另行排查問題原因。

    Presto、Impala和HBase等常駐服務的計算組件需重啟各自的服務組件使上述配置生效。Hive和Spark等On YARN的計算組件直接重跑作業即可生效。

  3. 緩存修復流程。
    • 使用Block模式:請提交工單進行組件升級處理。
    • 使用Cache模式:
      說明 因為已經關閉了緩存,所以以下操作不會影響業務。
      1. 在EMR控制臺停止SmartData服務。
      2. 將腳本format_cache.sh上傳到集群的Master節點,并使用hadoop用戶執行以下命令。
        sh format_cache.sh
      3. 在EMR控制臺SmartData服務的storage配置頁,添加Key為storage.compaction.enable,Value為false的配置項。
      4. 在EMR控制臺啟動SmartData服務。
      5. 重新打開緩存開關,修改參數jfs.cache.data-cache.enable的參數值為true