使用 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%
  1. 選取 [Ambari 檢視] 圖示,然後選取格線模式。 接著,選取 [YARN 佇列管理員]

    Apache Ambari 儀表板 YARN Queue Manager。

  2. 選取 [預設] 佇列。

    Apache Ambari YARN 選取預設佇列。

  3. 對於 [預設] 佇列,將 [容量] 從 50% 變更為 25%。 對於 [thriftsvr] 佇列,將 [容量] 變更為 25%。

    將預設和 thriftsvr 佇列的容量變更為 25%。

  4. 若要建立新的佇列,請選取 [新增佇列]

    Apache Ambari YARN 儀表板新增佇列。

  5. 命名新的佇列。

    Apache Ambari YARN 儀表板命名佇列。

  6. 將 [容量] 值保持在 50%,然後選取 [動作] 按鈕。

    Apache Ambari YARN 選取動作。

  7. 選取 [Save and Refresh Queues] \(儲存並重新整理佇列)

    選取 [Save and Refresh Queues] \(儲存並重新整理佇列)。

這些變更都會立即顯示在 YARN 排程器 UI 中。

進一步閱讀

如何下載叢集的 YARN 記錄?

解決步驟

  1. 使用安全殼層 (SSH) 用戶端連線到 HDInsight 叢集。 如需詳細資訊,請參閱進一步閱讀

  2. 若要列出目前執行中的 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
    
  3. 若要下載所有應用程式主機的 YARN 容器記錄,請使用下列命令:

    yarn logs -applicationIdn logs -applicationId <application_id> -am ALL > amlogs.txt
    

    此命令會建立名為 amlogs.txt 的記錄檔。

  4. 若要下載僅有最新應用程式主機的 YARN 容器記錄,請使用下列命令:

    yarn logs -applicationIdn logs -applicationId <application_id> -am -1 > latestamlogs.txt
    

    此命令會建立名為 latestamlogs.txt 的記錄檔。

  5. 若要下載前兩部應用程式主機的 YARN 容器記錄,請使用下列命令:

    yarn logs -applicationIdn logs -applicationId <application_id> -am 1,2 > first2amlogs.txt
    

    此命令會建立名為 first2amlogs.txt 的記錄檔。

  6. 若要下載所有 YARN 容器記錄,請使用下列命令:

    yarn logs -applicationIdn logs -applicationId <application_id> > logs.txt
    

    此命令會建立名為 logs.txt 的記錄。

  7. 若要下載特定容器的 YARN 容器記錄,請使用下列命令:

    yarn logs -applicationIdn logs -applicationId <application_id> -containerId <container_id> > containerlogs.txt
    

    此命令會建立名為 containerlogs.txt 的記錄檔。

延伸閱讀

如何檢查 Yarn 應用程式診斷資訊?

Yarn UI 中的診斷功能可讓您檢視在 Yarn 上所執行應用程式的狀態和記錄。 診斷可協助您對應用程式進行疑難排解和偵錯,以及監視其效能和資源使用量。

若要檢視特定應用程式的診斷,您可以按下應用程式清單中的應用程式識別碼。 在應用程式詳細資料頁面上,您也可以查看已嘗試執行應用程式的所有嘗試清單。 您可以按下任何嘗試以查看更多詳細資料,例如嘗試識別碼、容器標識碼、節點識別碼、開始時間、完成時間和診斷

顯示 Yarn 應用程式診斷的螢幕擷取畫面。

如何疑難排解 YARN 常見的問題?

Yarn UI 未載入

如果您的 YARN UI 無法載入或無法連線,並且傳回「HTTP 錯誤 502.3 - 錯誤的閘道」,則表明您的 Resource Manager 服務狀況不良。 若要降低此問題的風險,請依照下列步驟操作:

  1. 移至 Ambari UI>YARN>SUMMARY,並確認是否只有作用中 Resource Manager 處於 [已啟動] 狀態。 若非如此,請嘗試重新啟動狀況不良或已停止的 Resource Manager 來減輕問題。
  2. 如果步驟 1 無法解決問題,請透過 SSH 連線至作用中 Resource Manager 前端節點,並使用 jstat -gcutil <Resource Manager pid> 1000 100 檢查記憶體回收狀態。 如果您在數秒內就看到 FGCT 大幅增加,表示 Resource Manager 正忙於處理完整 GC,而無法處理其他要求。
  3. 移至 [Ambari UI]>[YARN]>[CONFIGS]>[進階],並增加 Resource Manager java heap size
  4. 在 Ambari UI 中重新啟動必要的服務。

這兩個資源管理員都處於待命狀態

  1. 檢查 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
  1. 如果錯誤存在,則請確認是否有些檔案處於複寫狀態,或 HDFS 中是否有遺漏區塊。 您可以執行 hdfs fsck hdfs://mycluster/

  2. 另請執行 hdfs fsck hdfs://mycluster/ -delete 以強制清理 HDFS 並移除待命 RM 問題。 或者,請在其中一個前端節點執行 PatchYarnNodeLabel 以修補叢集。

下一步

如果您沒有看到您的問題,或無法解決您的問題,請瀏覽下列其中一個管道以取得更多支援:

  • 透過 Azure 社群支援獲得由 Azure 專家所提供的解答。

  • 連線至 @AzureSupport,這是用來改善客戶體驗的官方 Microsoft Azure 帳戶。 將 Azure 社群連線到正確的資源:解答、支援和專家。

  • 如果需要更多協助,您可在 Azure 入口網站提交支援要求。 從功能表列中選取 [支援] 或開啟 [說明 + 支援] 中樞。 如需詳細資訊,請參閱如何建立 Azure 支援要求。 Microsoft Azure 訂用帳戶包括訂用帳戶管理及帳務支援的存取權,而技術支援由其中一項 Azure 支援方案提供。