使用 Azure HDInsight 針對 Apache Hadoop YARN 問題進行疑難排解
了解在 Apache Ambari 中使用 Apache Hadoop YARN 承載時最常發生的問題及其解決方法。
如何在叢集上建立新的 YARN 佇列?
解決步驟
在 Ambari 使用下列步驟建立新的 YARN 佇列,然後平衡所有佇列之間的容量配置。
在本例中,兩個現有的佇列 (預設和 thriftsvr) 都從 50% 的容量變更為 25% 的容量,讓新的佇列 (spark) 有 50% 的容量。
Queue | Capacity | 容量上限 |
---|---|---|
預設值 | 25% | 50% |
thrftsvr | 25% | 50% |
Spark | 50% | 50% |
選取 [Ambari 檢視] 圖示,然後選取格線模式。 接著,選取 [YARN 佇列管理員]。
選取 [預設] 佇列。
對於 [預設] 佇列,將 [容量] 從 50% 變更為 25%。 對於 [thriftsvr] 佇列,將 [容量] 變更為 25%。
若要建立新的佇列,請選取 [新增佇列]。
命名新的佇列。
將 [容量] 值保持在 50%,然後選取 [動作] 按鈕。
選取 [Save and Refresh Queues] \(儲存並重新整理佇列)。
這些變更都會立即顯示在 YARN 排程器 UI 中。
進一步閱讀
如何下載叢集的 YARN 記錄?
解決步驟
使用安全殼層 (SSH) 用戶端連線到 HDInsight 叢集。 如需詳細資訊,請參閱進一步閱讀。
若要列出目前執行中的 YARN 應用程式本身的應用程式識別碼,請執行下列命令:
yarn top
識別碼會列在 [APPLICATIONID] 資料行。 您可以從 [APPLICATIONID] 資料行下載記錄。
YARN top - 18:00:07, up 19d, 0:14, 0 active users, queue(s): root NodeManager(s): 4 total, 4 active, 0 unhealthy, 0 decommissioned, 0 lost, 0 rebooted Queue(s) Applications: 2 running, 10 submitted, 0 pending, 8 completed, 0 killed, 0 failed Queue(s) Mem(GB): 97 available, 3 allocated, 0 pending, 0 reserved Queue(s) VCores: 58 available, 2 allocated, 0 pending, 0 reserved Queue(s) Containers: 2 allocated, 0 pending, 0 reserved APPLICATIONID USER TYPE QUEUE #CONT #RCONT VCORES RVCORES MEM RMEM VCORESECS MEMSECS %PROGR TIME NAME application_1490377567345_0007 hive spark thriftsvr 1 0 1 0 1G 0G 1628407 2442611 10.00 18:20:20 Thrift JDBC/ODBC Server application_1490377567345_0006 hive spark thriftsvr 1 0 1 0 1G 0G 1628430 2442645 10.00 18:20:20 Thrift JDBC/ODBC Server
若要下載所有應用程式主機的 YARN 容器記錄,請使用下列命令:
yarn logs -applicationIdn logs -applicationId <application_id> -am ALL > amlogs.txt
此命令會建立名為 amlogs.txt 的記錄檔。
若要下載僅有最新應用程式主機的 YARN 容器記錄,請使用下列命令:
yarn logs -applicationIdn logs -applicationId <application_id> -am -1 > latestamlogs.txt
此命令會建立名為 latestamlogs.txt 的記錄檔。
若要下載前兩部應用程式主機的 YARN 容器記錄,請使用下列命令:
yarn logs -applicationIdn logs -applicationId <application_id> -am 1,2 > first2amlogs.txt
此命令會建立名為 first2amlogs.txt 的記錄檔。
若要下載所有 YARN 容器記錄,請使用下列命令:
yarn logs -applicationIdn logs -applicationId <application_id> > logs.txt
此命令會建立名為 logs.txt 的記錄。
若要下載特定容器的 YARN 容器記錄,請使用下列命令:
yarn logs -applicationIdn logs -applicationId <application_id> -containerId <container_id> > containerlogs.txt
此命令會建立名為 containerlogs.txt 的記錄檔。
延伸閱讀
如何檢查 Yarn 應用程式診斷資訊?
Yarn UI 中的診斷功能可讓您檢視在 Yarn 上所執行應用程式的狀態和記錄。 診斷可協助您對應用程式進行疑難排解和偵錯,以及監視其效能和資源使用量。
若要檢視特定應用程式的診斷,您可以按下應用程式清單中的應用程式識別碼。 在應用程式詳細資料頁面上,您也可以查看已嘗試執行應用程式的所有嘗試清單。 您可以按下任何嘗試以查看更多詳細資料,例如嘗試識別碼、容器標識碼、節點識別碼、開始時間、完成時間和診斷
如何疑難排解 YARN 常見的問題?
Yarn UI 未載入
如果您的 YARN UI 無法載入或無法連線,並且傳回「HTTP 錯誤 502.3 - 錯誤的閘道」,則表明您的 Resource Manager 服務狀況不良。 若要降低此問題的風險,請依照下列步驟操作:
- 移至 Ambari UI>YARN>SUMMARY,並確認是否只有作用中 Resource Manager 處於 [已啟動] 狀態。 若非如此,請嘗試重新啟動狀況不良或已停止的 Resource Manager 來減輕問題。
- 如果步驟 1 無法解決問題,請透過 SSH 連線至作用中 Resource Manager 前端節點,並使用
jstat -gcutil <Resource Manager pid> 1000 100
檢查記憶體回收狀態。 如果您在數秒內就看到 FGCT 大幅增加,表示 Resource Manager 正忙於處理完整 GC,而無法處理其他要求。 - 移至 [Ambari UI]>[YARN]>[CONFIGS]>[進階],並增加
Resource Manager java heap size
。 - 在 Ambari UI 中重新啟動必要的服務。
這兩個資源管理員都處於待命狀態
- 檢查 Resource Manager 記錄,以查看是否有類似錯誤。
Service RMActiveServices failed in state STARTED; cause: org.apache.hadoop.service.ServiceStateException: com.google.protobuf.InvalidProtocolBufferException: Could not obtain block: BP-452067264-10.0.0.16-1608006815288:blk_1074235266_494491 file=/yarn/node-labels/nodelabel.mirror
如果錯誤存在,則請確認是否有些檔案處於複寫狀態,或 HDFS 中是否有遺漏區塊。 您可以執行
hdfs fsck hdfs://mycluster/
另請執行
hdfs fsck hdfs://mycluster/ -delete
以強制清理 HDFS 並移除待命 RM 問題。 或者,請在其中一個前端節點執行 PatchYarnNodeLabel 以修補叢集。
下一步
如果您沒有看到您的問題,或無法解決您的問題,請瀏覽下列其中一個管道以取得更多支援:
透過 Azure 社群支援獲得由 Azure 專家所提供的解答。
連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 將 Azure 社群連線到正確的資源:解答、支援和專家。
如果需要更多協助,您可在 Azure 入口網站提交支援要求。 從功能表列中選取 [支援] 或開啟 [說明 + 支援] 中樞。 如需詳細資訊,請參閱如何建立 Azure 支援要求。 Microsoft Azure 訂用帳戶包括訂用帳戶管理及帳務支援的存取權,而技術支援由其中一項 Azure 支援方案提供。