本文為您介紹小檔案最佳化以及作業診斷時的常見問題。
問題類別 | 常見問題 |
小檔案最佳化 | |
作業診斷 |
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
命令查詢是否綁定正確。