A. sqoop export導入任務失敗但部分數據入庫成功能問題
藉助Azkaban進行大數據任務調度時,遭遇sqoop export導入任務失敗,但部分數據成功入庫的困境。任務失敗告警顯示「Job failed as tasks failed. failedMaps:1 failedReces:0」,但Azkaban頁面信息不詳,僅提示錯誤,無具體原因。開發反饋指出,與之前相比,業務數據量減少了一半。
深入分析後,發現sqoop export任務從Hive導出數據至MySQL。查看MySQL表,記錄量少於預期,Hive表則顯示正確數據量。排除數據源問題後,通過執行分頁查詢發現,第101條數據的欄位合並,導致數據不一致。懷疑是欄位合並導致欄位數量不匹配。進一步排查,排除數據源問題,但在不同環境下查詢,問題依然存在,最終意識到是sqoop的使用不當。
了解到,sqoop export將任務轉化為Hadoop的MapRece作業執行。Azkaban的日誌中已顯示失敗原因,只是未引起注意。通過Yarn管理頁面,可定位到具體執行節點,進而獲取詳細執行日誌。在NodeManager上執行命令獲取日誌,發現資料庫欄位長度不足,應修改為mediumtext類型,清理異常數據後重新執行任務,成功恢復數據量至預期。
總結而言,azkaban任務執行失敗時,應首先關注azkaban提供的錯誤日誌,其中可能隱藏關鍵信息。大數據任務最終由Yarn調度與執行,可通過Hadoop Job管理頁面追蹤任務執行情況。在Yarn節點上獲取執行日誌,有助於排查問題。
擴展:Yarn架構由ResourceManager、APPlicationMaster、NodeManager和Container四大組件組成。ResourceManager負責處理客戶端請求、啟動監控ApplicationMaster、監控NodeManager以及資源分配與調度。APPlicationMaster負責程序切分、申請資源分配任務,以及任務監控與容錯。NodeManager管理單個節點資源,處理來自ResourceManager的命令與來自ApplicationMaster的命令。Container對任務運行環境進行抽象,封裝資源與任務運行相關信息。
部分失敗任務日誌詳情參見相關博客鏈接。