全部產品
Search
文件中心

:小檔案最佳化及作業診斷常見問題

更新時間:Jun 19, 2024

本文為您介紹小檔案最佳化以及作業診斷時的常見問題。

問題類別常見問題
小檔案最佳化MaxCompute什麼情況下會產生小檔案?如何解決小檔案問題?
作業診斷

MaxCompute什麼情況下會產生小檔案?如何解決小檔案問題?

  • 產生情境:

    MaxCompute使用Apsara Distributed File SystemDistributed File System是按塊(Block)存放的,通常檔案大小比塊大小小的檔案(預設塊大小為64MB),被稱為小檔案。

    以下情境會產生小檔案:
    • Reduce計算過程會產生大量小檔案。
    • Tunnel資料擷取過程中會產生小檔案。
    • Job執行過程中產生的各種臨時檔案、資源回收筒保留的到期的檔案等,主要分類有以下幾種:
      • TABLE_BACKUP:資源回收筒中超過保留天數的表。
      • FUXI_JOB_TMP:作業運行臨時目錄。
      • TMP_TABLE:作業運行中產生的暫存資料表。
      • INSTANCE:作業運行時保留在META表中的日誌。
      • LIFECYCLE:超過生命週期的資料表或分區。
      • INSTANCEPROFILE:作業提交及執行完成後的Profile資訊。
      • VOLUME_TMP:沒有META資訊,但在Apsara Distributed File System上有路徑的資料。
      • TEMPRESOURCE:使用者自訂函數使用的一次性臨時資源檔。
      • FAILOVER:系統發生失效轉移(Failover)時保留的臨時檔案。
    可以通過如下命令查看錶中的小檔案數量。
    desc extended + 表名          
  • 問題影響:
    小檔案過多會帶來以下影響:
    • 影響啟動Map Instance,預設情況下一個小檔案對應一個Instance,造成浪費資源,影響整體的執行效能。
    • 過多的小檔案給Apsara Distributed File System檔案系統帶來壓力,且影響空間的有效利用,嚴重的會直接導致Apsara Distributed File System檔案系統不可服務。
  • 處理方式:
    不同原因產生的小檔案,需要有不同的處理方法:
    • Reduce過程中產生的小檔案。您需要使用Insert Overwrite源表(或分區)即可,或者將資料寫入到新表刪除源表。
    • Tunnel資料擷取過程中產生的小檔案,通過如下方式處理:
      • 調用Tunnel SDK時,當緩衝達到64MB時提交一次。
      • 使用用戶端時避免頻繁上傳小檔案,建議積累較大時一次性上傳。
      • 如果匯入的是分區表,建議給分區設定生命週期,到期不用的資料自動清理。
      • Insert Overwrite源表(或分區)。
      • ALTER合并模式,通過如下命令進行合并。
        ALTER TABLE tablename [PARTITION] MERGE SMALLFILES;                         

執行並發插入操作報錯,如何處理?

  • 問題現象

    執行並發插入操作時,返回報錯如下。

    ODPS-0110999: Critical! Internal error happened in commit operation and rollback failed, possible breach of atomicity - Rename directory failed during DDLTask.       
  • 產生原因

    MaxCompute沒有並發控制,可能有多個任務在修改這張表。這種情況下,有極小的機率在最後的META操作時,發生並發衝突導致執行異常。同時ALTER、INSERT操作都會發生此情況。

  • 解決措施

    建議您將此表修改為分區表,每個SQL語句插入的資料寫入單獨的分區裡,這樣便可以執行並行作業。

運行作業時,報錯ODPS-0130121,如何解決?

  • 問題現象

    運行作業時,返回報錯如下。

    FAILED:ODPS-0130121:Invalid argument type - line 1:7 'testfunc':in function class
  • 產生原因

    內建函數接收到的參數類型不正確。

  • 解決措施

    建議您檢查輸入參數的資料類型,確保滿足函數入參要求。

建立的Shell任務執行失敗,在ECS伺服器執行顯示成功,營運中心無法查看失敗的原因,如何解決?

可以在ECS上執行以下代碼,命令重啟Agent後,重新執行任務。
su - admin
/home/admin/alisatasknode/target/alisatasknode/bin/serverctl restart

如果還是看不到作業記錄,配置IP10.116.134.123訪問8000連接埠後再試。

DataWorks-營運中心-任務管理中查看某個任務屬性,為何顯示的狀態是暫停?

配置中心 > 專案配置中查看是否啟用了此任務。
  • 如果啟用了此任務,請查看此任務的上遊任務是否執行失敗。
  • 如果沒有啟用此任務,請按右鍵工作節點查看是否運行正常,或將此任務重新命名後配置調度。

執行Data Integration操作時,右上方總是彈出訊息框提示Order欄位是否已經刪除,是什麼原因?

首先查看資料庫中的Order欄位是否已經被刪除。

清除緩衝後,將同步任務重新設定或者重新建立同步任務,再次執行驗證。

odpscmd -f執行SQL檔案失敗,沒有提示報錯資訊,如何解決?

首先需要擷取任務的作業記錄或者報錯資訊,才能定位問題。

通過Shell執行odpscmd -f命令,日誌資訊會列印在Shell中。不過在Shell中調用正常,但是在crontab中調用時會報錯且沒有日誌。

針對這種情況,您可以在crontab中把任務執行的輸出記錄下來,後續出了問題可以在記錄檔裡擷取任務的日誌。執行語句為odpscmd -f xxx.sql >> path/to/odpscmd.log 2>&1

使用DataWorks時,很多資料同步任務處於等待狀態是什麼原因?

同步任務使用公用調度資源時一直在等待狀態,您可以通過離線同步任務調優實現最大化的同步速度。

您也可以添加自己的調度資源,詳情請參見新增和使用自訂Data Integration資源群組

Shell任務執行時,調度資源管理添加的其中一台伺服器一直顯示停止狀態,重新執行了初始化還是顯示停止,是什麼原因?

  • 如果是傳統網路,請確認註冊使用的機器名稱是否為機器的真實名稱。在ECS上執行hostname命令,返回的結果即為機器名稱,不支援自訂名稱。
  • 如果是專用網路,請確認是否修改過ECS的主機名稱,注意這裡不是指執行個體名。如果修改過主機名稱,在ECS上執行cat /etc/hosts命令查詢是否綁定正確。