共用方式為


手動調整 Azure HDInsight 叢集

HDInsight 提供可選擇擴大及縮小叢集中背景工作節點數的彈性。 此彈性可讓您在下班後或週末時縮小叢集。 並於業務需求達到高峰期間擴大叢集。

在定期批次處理之前擴大叢集,讓叢集有足夠的資源。 在處理完成之後,且使用量降低時,您可以將 HDInsight 叢集縮小為較少的背景工作節點。

您可以使用下列其中一種方法來手動調整叢集。 您也可以使用自動調整選項來自動擴大及縮小,以回應特定計量。

注意

只支援使用 HDInsight 3.1.3 版或更高版本的叢集。 如果不確定您的叢集版本,您可以檢查 [屬性] 頁面。

調整叢集的公用程式

Microsoft 提供下列公用程式來調整叢集:

公用程式 描述
PowerShell Az Set-AzHDInsightClusterSize -ClusterName CLUSTERNAME -TargetInstanceCount NEWSIZE
PowerShell AzureRM Set-AzureRmHDInsightClusterSize -ClusterName CLUSTERNAME -TargetInstanceCount NEWSIZE
Azure CLI az hdinsight resize --resource-group RESOURCEGROUP --name CLUSTERNAME --workernode-count NEWSIZE
Azure 傳統 CLI azure hdinsight cluster resize CLUSTERNAME NEWSIZE
Azure 入口網站 開啟 [HDInsight 叢集] 窗格,選取左側功能表中的 [叢集大小],然後在 [叢集大小] 窗格中鍵入背景工作節點數並選取 [儲存]。

Azure 入口網站調整叢集選項。

只要使用上述任一方法,您即可在幾分鐘內相應增加或相應減少 HDInsight 叢集。

重要

  • Azure 傳統 CLI 已經淘汰,應只搭配傳統部署模型一起使用。 針對所有其他部署,請使用 Azure CLI
  • PowerShell AzureRM 模組已經淘汰。 請盡可能使用 Az 模組

調整大小作業的影響

當您將節點新增至執行中的 HDInsight 叢集 (擴大) 時,作業仍不會受到影響。 在調整程序執行的同時,您仍可放心地提交新的作業。 若調整大小作業失敗,則該失敗會讓您的叢集保留在功能狀態。

若您移除節點 (縮小),則當調整大小作業完成時,擱置中或執行中的作業都會失敗。 此失敗的發生原因是調整大小程序期間會重新啟動某些服務。 在手動調整大小作業期間,您的叢集可能會滯留在安全模式。

變更資料節點數目的影響會因為 HDInsight 支援的各種類型叢集而有所不同:

  • Apache Hadoop \(英文\)

    您可以順暢地增加正在執行之 Hadoop 叢集中的背景工作節點數,而不會影響任何作業。 您也可以在作業進行當中提交新工作。 調整大小作業中的失敗已妥善處理。 叢集一律會保留在功能狀態。

    將 Hadoop 叢集縮小至較少資料節點時,會重新啟動某些服務。 此行為會導致所有執行中和擱置的工作在調整作業完成時失敗。 但您可以在作業完成後重新提交這些工作。

  • Apache HBase

    您可以在執行 HBase 叢集時,順暢地將節點新增至其中或加以移除。 區域伺服器會在完成調整作業的數分鐘之內自動取得平衡。 然而,您可以手動平衡區域伺服器。 登入叢集前端節點並執行下列命令:

    pushd %HBASE_HOME%\bin
    hbase shell
    balancer
    

    如需使用 HBase 殼層的詳細資訊,請參閱開始使用 HDInsight 中的 Apache HBase 範例

    注意

    不適用於 Kafka 叢集。

  • Apache Hive LLAP

    調整為 N 背景工作節點之後,HDInsight 會自動設定下列設定並重新啟動 Hive。

    • 並行查詢總計上限:hive.server2.tez.sessions.per.default.queue = min(N, 32)
    • Hive LLAP 所使用的節點數:num_llap_nodes = N
    • 執行 Hive LLAP 精靈的節點數:num_llap_nodes_for_llap_daemons = N

如何安全地縮小叢集

使用執行中的作業縮小叢集

若要在縮小作業期間避免執行中的作業失敗,您可以嘗試三件事:

  1. 減小叢集之前先等候作業完成。
  2. 手動結束作業。
  3. 調整大小作業完成之後再重新提交作業。

若要查看擱置中與執行中作業的清單,您可以使用 YARN ResourceManager UI,並遵循下列步驟:

  1. Azure 入口網站中,選取您的叢集。 叢集會在新的入口網站分頁中開啟。

  2. 從主要檢視中,巡覽至 [叢集儀表板]>[Ambari home] \(Ambari 首頁\)。 輸入您的叢集認證。

  3. 從 Ambari UI 中,選取左側功能表上服務清單中的 [YARN]

  4. 從 [YARN] 頁面上,選取 [快速連結],並暫留在使用中的前端節點上,然後選取 [Resource Manager UI]

    Apache Ambari 快速連結 Resource Manager UI。

您可以使用 https://<HDInsightClusterName>.azurehdinsight.net/yarnui/hn/cluster 直接存取 Resource Manager UI。

您會看到作業及其目前狀態的清單。 螢幕擷取畫面中有一項目前正在執行的作業:

Resource Manager UI 應用程式。

若要手動終止該執行中的應用程式,請從 SSH 殼層執行下列命令:

yarn application -kill <application_id>

例如:

yarn application -kill "application_1499348398273_0003"

無法脫離安全模式

當您縮小叢集時,HDInsight 會使用 Apache Ambari 管理介面先解除額外的背景工作節點。 節點會將其 HDFS 區塊複寫至其他線上背景工作節點。 之後,HDInsight 會安全地縮小叢集。 HDFS 會在調整大小作業期間進入安全模式。 HDFS 已預期會在調整大小完成之後推出。 然而,在某些情況下,HDFS 會因為複寫不足的檔案封鎖,而在調整大小作業期間滯留在安全模式。

根據預設,HDFS 設定為 1 的 dfs.replication 設定,其可控制每個檔案封鎖的可用複本數目。 每個檔案封鎖的複本都會儲存於叢集的不同節點上。

當預期的封鎖複本數目無法使用時,HDFS 會進入安全模式,而 Ambari 會產生警示。 HDFS 可能會進入調整大小作業的安全模式。 若未偵測到複寫所需的節點數,叢集可能會停滯在安全模式。

安全模式開啟時的錯誤範例

org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hive/hive/819c215c-6d87-4311-97c8-4f0b9d2adcf0. Name node is in safe mode.
org.apache.http.conn.HttpHostConnectException: Connect to active-headnode-name.servername.internal.cloudapp.net:10001 [active-headnode-name.servername. internal.cloudapp.net/1.1.1.1] failed: Connection refused

您可以從 /var/log/hadoop/hdfs/ 資料夾檢閱接近叢集調整時的名稱節點記錄,以查看其進入安全模式的時間。 記錄檔名稱為 Hadoop-hdfs-namenode-<active-headnode-name>.*

根本原因是 Hive 在執行查詢時會依賴 HDFS 中的暫存檔案。 當 HDFS 進入安全模式時,Hive 會因為無法寫入 HDFS 而無法執行查詢。 HDFS 中的暫存檔位於掛接至個別背景工作節點 VM 的本機磁碟。 這些檔案會在至少三個複本的其他背景工作節點之間複寫。

如何防止 HDInsight 停滯在安全模式

有數種方式可避免讓 HDInsight 無法脫離安全模式:

  • 先停止所有 Hive 作業,再相應減少 HDInsight。 或者,對縮小程序進行排程,以免與執行中的 Hive 作業發生衝突。
  • 先手動清除 Hive 在 HDFS 中的暫存 tmp 目錄檔案,再相應減少。
  • 只將 HDInsight 縮小為三個背景工作節點 (最小值)。 避免減少到只剩一個背景工作節點。
  • 如有需要,則執行命令來脫離安全模式。

下列幾節會說明這些選項。

停止所有 Hive 作業

先停止所有 Hive 作業,再相應減少為一個背景工作節點。 若您已排程工作負載,則請在 Hive 工作完成後執行縮小作業。

在調整大小之前停止 Hive 作業,有助於將暫存資料夾中的暫存檔案數目降至最低 (若有的話)。

手動清除 Hive 的暫存檔案

如果 Hive 有遺留暫存檔案,則可以先手動清除那些檔案再相應減少,以避開安全模式。

  1. 查看 hive.exec.scratchdir 設定屬性,以檢查 Hive 暫存檔案所使用的位置為何。 此參數會在 /etc/hive/conf/hive-site.xml 中進行設定:

    <property>
        <name>hive.exec.scratchdir</name>
        <value>hdfs://mycluster/tmp/hive</value>
    </property>
    
  2. 停止 Hive 服務,並確定所有查詢和作業皆已完成。

  3. 列出上述找到的暫存目錄內容,以便 hdfs://mycluster/tmp/hive/ 查看其中是否包含任何檔案:

    hadoop fs -ls -R hdfs://mycluster/tmp/hive/hive
    

    以下是有檔案存在時的輸出範例:

    sshuser@scalin:~$ hadoop fs -ls -R hdfs://mycluster/tmp/hive/hive
    drwx------   - hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c
    drwx------   - hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/_tmp_space.db
    -rw-r--r--   3 hive hdfs         27 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/inuse.info
    -rw-r--r--   3 hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/inuse.lck
    drwx------   - hive hdfs          0 2017-07-06 20:30 hdfs://mycluster/tmp/hive/hive/c108f1c2-453e-400f-ac3e-e3a9b0d22699
    -rw-r--r--   3 hive hdfs         26 2017-07-06 20:30 hdfs://mycluster/tmp/hive/hive/c108f1c2-453e-400f-ac3e-e3a9b0d22699/inuse.info
    
  4. 如果您知道 Hive 不會再使用這些檔案,則可將其移除。 請查看 Yarn ResourceManager UI 頁面,確定 Hive 沒有任何執行中的查詢。

    從 HDFS 中移除檔案的命令列範例:

    hadoop fs -rm -r -skipTrash hdfs://mycluster/tmp/hive/
    

將 HDInsight 調整為三個以上的背景工作節點

若您的叢集在縮小到少於三個背景工作節點時經常滯留在安全模式,則請保留至少三個背景工作節點。

擁有三個背景工作節點的成本比縮小至只有一個背景工作節點的成本還高。 然而,此動作可防止您的叢集停滯在安全模式。

將 HDInsight 縮小至一個背景工作節點

即使叢集縮小至一個節點,背景工作節點 0 仍會存留。 背景工作節點 0 永遠不會遭到解除。

執行命令來脫離安全模式

最終選項是執行離開安全模式命令。 若 HDFS 因為 Hive 檔案複寫不足而進入安全模式,請執行下列命令以離開安全模式:

hdfs dfsadmin -D 'fs.default.name=hdfs://mycluster/' -safemode leave

縮小 Apache HBase 叢集

區域伺服器會在完成調整大小作業的數分鐘內自動取得平衡。 若要手動平衡區域伺服器,請使用下列步驟來完成:

  1. 使用 SSH 連線到 HDInsight 叢集。 如需詳細資訊,請參閱搭配 HDInsight 使用 SSH

  2. 啟動 HBase 殼層:

    hbase shell
    
  3. 使用下列命令手動平衡區域伺服器:

    balancer
    

下一步

如需有關調整 HDInsight 叢集的特定資訊,請參閱: