自動調整 Azure HDInsight 叢集規模

Azure HDInsight 的免費自動調整功能可以根據客戶採用的叢集計量和調整原則,自動增加或減少叢集中的背景工作節點數目。 自動調整功能的運作方式是根據效能計量或已定義的相應增加和相應減少作業排程來調整預設限制內的節點數目

運作方式

自動調整功能會使用兩種類型的條件來觸發調整事件:各種叢集效能計量的閾值(稱為 負載型調整)和以時間為基礎的觸發程式(稱為 以排程為基礎的調整)。 以負載為基礎的調整會變更叢集中的節點數目,在您設定的範圍內,以確保最佳的CPU使用量,並將執行成本降至最低。 排程型調整會根據相應增加和相應減少作業的排程,變更叢集中的節點數目。

下列影片概述自動調整可解決的挑戰,以及如何協助您使用 HDInsight 控制成本。

選擇以負載為基礎的或以排程為基礎的調整

您可以使用以排程為基礎的調整:

  • 當您的作業預期會在固定排程和可預測的持續時間上執行時,或當您預期在一天的特定時間期間使用量較低時,例如,在上班時間、日終作業中測試及開發環境。

您可以使用負載型調整:

  • 當負載模式在白天大幅波動且無法預測時。 例如,根據各種因素,使用負載模式中隨機波動排序數據處理

叢集計量

自動調整會持續監視叢集並收集下列計量:

計量 描述
擱置的 CPU 總計 開始執行所有暫止容器所需的核心總數。
擱置的記憶體總計 開始執行所有暫止容器所需的記憶體總計(以 MB 為單位)。
可用的 CPU 總計 使用中背景工作節點上所有未使用的核心總和。
可用的記憶體總計 使用中背景工作節點上未使用的記憶體總和(以 MB 為單位)。
每個節點的已使用記憶體 背景工作節點上的負載。 使用 10 GB 記憶體的背景工作節點,會被視為負載大於具有 2 GB 已使用記憶體的背景工作角色。
每個節點的應用程式主機數目 在背景工作節點上執行的應用程式主機 (AM) 容器數目。 裝載兩個AM容器的背景工作節點,會被視為比裝載零AM容器的背景工作節點更重要。

上述計量會每隔 60 秒檢查一次。 自動調整會根據這些計量做出相應增加和相應減少決策。

負載型調整條件

偵測到下列條件時,自動調整會發出調整要求:

擴大 縮小
暫止 CPU 總計大於可用 CPU 總計超過 3-5 分鐘。 暫止 CPU 總計小於可用 CPU 總計超過 3-5 分鐘。
暫止記憶體總計大於可用記憶體總計超過 3-5 分鐘。 暫止記憶體總計小於總可用記憶體超過 3-5 分鐘。

針對相應增加,自動調整會發出相應增加要求,以新增所需的節點數目。 相應增加是以符合目前 CPU 和記憶體需求所需的新背景工作節點數目為基礎。

針對相應減少,自動調整會發出移除某些節點的要求。 相應減少是以每個節點的應用程式主機 (AM) 容器數目為基礎。 以及目前的 CPU 和記憶體需求。 服務也會根據目前的作業執行,偵測哪些節點是移除的候選節點。 相應減少作業會先解除委任節點,然後從叢集中移除它們。

自動調整的Ambari DB重設大小考慮

建議您正確調整 Ambari DB 的大小,以取得自動調整的優點。 客戶應該使用正確的資料庫層,並針對大型叢集使用自定義Ambari DB。 請閱讀 資料庫和前端節點大小調整建議

叢集相容性

重要

Azure HDInsight 自動調整功能已於 2019 年 11 月 7 日正式發行,適用於 Spark 和 Hadoop 叢集,並包含功能預覽版本中未提供的改善項目。 如果您在 2019 年 11 月 7 日之前已建立 Spark 叢集,並想要在叢集上使用自動調整功能,建議的路徑是建立新叢集,並在新叢集上啟用自動調整。

互動式查詢的自動調整 (LLAP) 於 2020 年 8 月 27 日正式推出 HDI 4.0。 自動調整僅適用於 Spark、Hadoop 和互動式查詢、叢集

下表描述與自動調整功能相容的叢集類型和版本。

版本 Spark Hive 互動式查詢 hbase Kafka
HDInsight 4.0 不含 ESP Yes Yes 是* No No
HDInsight 4.0 與 ESP Yes Yes 是* No No
HDInsight 5.0 不含 ESP Yes Yes 是* No No
HDInsight 5.0 與 ESP Yes Yes 是* No No

* 互動式查詢叢集只能針對排程型調整進行設定,而不是以負載為基礎的調整。

開始使用

建立具有負載型自動調整的叢集

若要使用以負載為基礎的調整來啟用自動調整功能,請完成下列步驟,作為一般叢集建立程式的一部分:

  1. 在 [ 組態 + 定價 ] 索引標籤上,選取 [ 啟用自動調整] 複選框。

  2. 選取 [自動調整類型] 下的 [載入型別]。

  3. 輸入下列屬性的預定值:

    • 背景工作節點的初始節點數目。
    • 背景工作節點的數目下限
    • 背景工作節點數目上限

    Enable worker node load-based autoscale.

背景工作節點的初始數目必須落在最小值和最大值之間,並包含。 此值會在建立叢集時定義叢集的初始大小。 背景工作節點數目下限應設定為三個以上。 將叢集調整為少於三個節點可能會導致它卡在安全模式中,因為檔案復寫不足。 如需詳細資訊,請參閱 陷入安全模式

建立具有排程型自動調整的叢集

若要使用以排程為基礎的調整來啟用自動調整功能,請完成下列步驟,作為一般叢集建立程式的一部分:

  1. 在 [ 組態 + 定價 ] 索引標籤上,核取 [ 啟用自動調整] 複選框。

  2. 輸入背景工作節點的節點數目,控制相應增加叢集的限制。

  3. 選取 [自動調整類型] 底下的 [排程型別]。

  4. 選取 [ 設定 ] 以開啟 [ 自動調整設定 ] 視窗。

  5. 選取您的時區,然後按下 [ + 新增條件]

  6. 選取新條件應套用的星期幾。

  7. 編輯條件生效的時間,以及叢集應調整為的節點數目。

  8. 如果需要,請新增更多條件。

    Enable worker node schedule-based creation.

節點數目必須介於 3 到您在新增條件之前輸入的背景工作節點數目上限。

最終建立步驟

從 [節點大小] 下方的下拉式清單中選取 VM,以選取背景工作節點的 VM 類型。 選擇每個節點類型的 VM 類型之後,您可以看到整個叢集的預估成本範圍。 調整 VM 類型以符合您的預算。

Enable worker node schedule-based autoscale node size.

您的訂用帳戶具有每個區域的容量配額。 前端節點的核心總數和最大背景工作節點不能超過容量配額。 不過,此配額是軟性限制;您隨時都可以建立支援票證,以輕鬆增加支援票證。

注意

如果您超過核心配額總計限制,您會收到錯誤訊息,指出「最大節點超過此區域中可用的核心,請選擇另一個區域,或連絡支持人員以增加配額」。

如需使用 Azure 入口網站 建立 HDInsight 叢集的詳細資訊,請參閱使用 Azure 入口網站 在 HDInsight 中建立以 Linux 為基礎的叢集。

使用 Resource Manager 樣本建立叢集

以負載為基礎的自動調整

您可以使用以負載為基礎的自動調整 Azure Resource Manager 範本來建立 HDInsight 叢集,方法是使用 屬性將節點新增autoscalecomputeProfile>workernode區段,如 maxInstanceCount json 代碼段所示。minInstanceCount 如需完整的 Resource Manager 範本,請參閱 快速入門範本:部署已啟用負載型自動調整的 Spark 叢集。

{
  "name": "workernode",
  "targetInstanceCount": 4,
  "autoscale": {
      "capacity": {
          "minInstanceCount": 3,
          "maxInstanceCount": 10
      }
  },
  "hardwareProfile": {
      "vmSize": "Standard_D13_V2"
  },
  "osProfile": {
      "linuxOperatingSystemProfile": {
          "username": "[parameters('sshUserName')]",
          "password": "[parameters('sshPassword')]"
      }
  },
  "virtualNetworkProfile": null,
  "scriptActions": []
}

以排程為基礎的自動調整

您可以將節點新增 autoscalecomputeProfile>workernode 區段,以排程為基礎的自動調整 Azure Resource Manager 範本來建立 HDInsight 叢集。 節點 autoscale 包含 recurrence 具有 timezone 的 , schedule 描述變更發生的時間。 如需完整的 Resource Manager 範本,請參閱 部署已啟用排程型自動調整的 Spark 叢集。

{
  "autoscale": {
    "recurrence": {
      "timeZone": "Pacific Standard Time",
      "schedule": [
        {
          "days": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday"
          ],
          "timeAndCapacity": {
            "time": "11:00",
            "minInstanceCount": 10,
            "maxInstanceCount": 10
          }
        }
      ]
    }
  },
  "name": "workernode",
  "targetInstanceCount": 4
}

啟用和停用執行中叢集的自動調整

使用 Azure 入口網站

若要在執行中的叢集上啟用自動調整,請選取 [設定 底下的 [叢集大小]。 然後選取 [ 啟用自動調整]。 選取您想要的自動調整類型,然後輸入以負載為基礎的或以排程為基礎的調整選項。 最後,選取 [儲存]

Enable worker node schedule-based autoscale running cluster.

使用 REST API

若要使用 REST API 在執行中的叢集上啟用或停用自動調整,請對自動調整端點提出 POST 要求:

https://management.azure.com/subscriptions/{subscription Id}/resourceGroups/{resourceGroup Name}/providers/Microsoft.HDInsight/clusters/{CLUSTERNAME}/roles/workernode/autoscale?api-version=2018-06-01-preview

在要求承載中使用適當的參數。 下列 json 承載可用來啟用自動調整。 使用承載 {autoscale: null} 來停用自動調整。

{ "autoscale": { "capacity": { "minInstanceCount": 3, "maxInstanceCount": 5 } } }

如需所有承載參數的完整描述,請參閱上一節關於 啟用以負載為基礎的自動調整 。 不建議在執行中的叢集上強制停用自動調整服務。

監視自動調整活動

叢集狀態

Azure 入口網站 中列出的叢集狀態可協助您監視自動調整活動。

Enable worker node load-based autoscale cluster status.

您可能會看到的所有叢集狀態消息都會在下列清單中說明。

叢集狀態 描述
執行中 叢集正常運作。 所有先前的自動調整活動都已順利完成。
更新中 正在更新叢集自動調整設定。
HDInsight 組態 叢集相應增加或相應減少作業正在進行中。
更新錯誤 HDInsight 會在自動調整組態更新期間遇到問題。 客戶可以選擇重試更新或停用自動調整。
錯誤 叢集發生問題,且無法使用。 刪除此叢集並建立新的叢集。

若要檢視叢集中目前的節點數目,請移至叢集 [概觀] 頁面上的 [叢集大小] 圖表。 或選取 [設定] 底下的 [叢集大小]。

作業歷程記錄

您可以在叢集計量中檢視叢集相應增加和相應減少歷程記錄。 您也可以列出過去一天、一周或其他時段內的所有調整動作。

選取 [監視] 底下的 [計量]。 然後,從 [計量] 下拉式方塊中選取 [新增計量] 和 [作用中工作者數目]。 選取右上方的按鈕以變更時間範圍。

Enable worker node schedule-based autoscale metric.

最佳作法

考慮相應增加和相應減少作業的延遲

整體調整作業可能需要 10 到 20 分鐘才能完成。 設定自定義排程時,請規劃此延遲。 例如,如果您需要叢集大小在上午 9:00 時為 20,請將排程觸發程式設定為先前的時間,例如上午 8:30 或更早時間,讓調整作業在上午 9:00 完成。

準備相應減少

在叢集相應減少程式中,自動調整會解除委任節點以符合目標大小。 在以負載為基礎的自動調整中,如果工作在這些節點上執行,自動調整會等到Spark和Hadoop叢集的工作完成為止。 由於每個背景工作節點也會在 HDFS 中提供角色,因此暫存數據會轉移到其餘的背景工作節點。 請確定其餘節點上有足夠的空間來裝載所有暫存數據。

注意

如果排程型自動調整相應減少,則不支援正常解除委任。 這可能會在相應減少作業期間造成作業失敗,並建議根據預期的作業排程模式規劃排程,以包含足夠的時間讓進行中的作業結束。 您可以設定排程來查看完成時間的歷史分散,以避免作業失敗。

根據使用模式設定以排程為基礎的自動調整

當您設定以排程為基礎的自動調整時,您必須瞭解叢集使用模式。 Grafana 儀錶板 可協助您了解查詢載入和執行位置。 您可以從儀表板取得可用的執行程式位置和執行程式位置總計。

以下是您可以估計需要多少背景工作節點的方式。 建議您再提供 10% 的緩衝區來處理工作負載的變化。

使用的執行程式位置數目 = 執行程式位置總計 – 可用執行程式位置總計。

所需的背景工作節點數目 = 實際使用的執行程式位置數目 / (hive.llap.daemon.num.executors + hive.llap.daemon.task.scheduler.wait.queue.size)

*hive.llap.daemon.num.executors 可設定,預設值為 4

*hive.llap.daemon.task.scheduler.wait.queue.size 可設定,預設值為 10

自訂指令碼動作

自定義腳本動作主要用於自定義節點 (亦即 HeadNode / WorkerNodes),可讓客戶設定它們所使用的特定連結庫和工具。 其中一個常見的使用案例是,在叢集上執行的作業可能會有一些相依性,而第三方連結庫是由客戶所擁有,而且該連結庫應該可在節點上取得,作業才能成功。 針對自動調整,我們目前支援會保存的自定義腳本動作,因此每次將新的節點新增至叢集作為相應增加作業的一部分時,這些持續性腳本動作都會執行,並張貼容器或作業會在其上配置。 雖然有自定義腳本動作有助於啟動載入新的節點,但建議將它保持在最低限度,因為它會增加整體相應增加延遲,並可能會對排程的作業造成影響。

請注意叢集大小下限

請勿將叢集縮減為少於三個節點。 將叢集調整為少於三個節點可能會導致它卡在安全模式中,因為檔案復寫不足。 如需詳細資訊,請參閱 陷入安全模式

Microsoft Entra Domain Services 和調整作業

如果您使用已加入 Microsoft Entra Domain Services 受控網域的企業安全性套件 (ESP) HDInsight 叢集,建議您節流 Microsoft Entra Domain Services 上的負載。 在複雜的目錄結構 範圍同步 中,我們建議避免對調整作業造成影響。

針對尖峰使用案例設定Hive設定最大並行查詢總數

自動調整事件不會變更 Ambari 中的 Hive 設定最大並行查詢 總數。 這表示Hive Server 2 Interactive Service 在任何時間點只能處理指定的並行查詢數目,即使互動式查詢精靈計數會根據負載和排程相應增加和減少。 一般建議是針對尖峰使用案例設定此設定,以避免手動介入。

不過,如果只有少數背景工作節點且最大並行查詢的值設定太高,您可能會遇到Hive Server 2 重新啟動失敗。 您至少需要可容納指定 Tez Ams 數目的背景工作節點數目下限(等於最大並行查詢組態)。

限制

互動式查詢精靈計數

如果已啟用自動調整功能的互動式查詢叢集,自動調整/減少事件也會相應增加/減少互動式查詢精靈的數目,以達到作用中背景工作節點的數目。 精靈數目的變更不會保存在Ambari中的 num_llap_nodes 組態中。 如果Hive服務以手動方式重新啟動,則會根據Ambari中的組態重設互動式查詢精靈的數目。

如果手動重新啟動互動式查詢服務,您必須在 [進階 Hive-interactive-env] 下手動變更num_llap_node執行 Hive 互動式查詢精靈所需的設定(節點數目),以符合目前的作用中背景工作節點計數。 互動式查詢叢集僅支援以排程為基礎的自動調整

下一步

閱讀調整指導方針中 手動調整叢集的指導方針