手動調整 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 portal scale cluster option.

您可以使用上述任何方法,在幾分鐘內相應增加或減少 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

    調整作業之後,您應該重新平衡分割區複本。 如需詳細資訊,請參閱 HDInsight 上的 Apache 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 精靈的 Node(s) 數目: num_llap_nodes_for_llap_daemons = N

如何安全地相應減少叢集

使用執行中的作業相應減少叢集

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

  1. 等候作業完成,再相應減少叢集。
  2. 手動結束作業。
  3. 在調整作業結束之後重新提交作業。

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

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

  2. 從主要檢視中,流覽至 [叢集儀錶板>][Ambari 首頁]。 輸入您的叢集認證。

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

  4. 從 YARN 頁面中,選取 [ 快速連結 ],並將滑鼠停留在作用中的前端節點上,然後選取 [Resource Manager UI]。

    Apache Ambari quick links Resource Manager UI.

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

您會看到作業清單及其目前狀態。 在螢幕快照中,目前有一個作業正在執行:

Resource Manager UI applications.

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

yarn application -kill <application_id>

例如:

yarn application -kill "application_1499348398273_0003"

無法脫離安全模式

當您相應減少叢集時,HDInsight 會使用 Apache Ambari 管理介面,先解除委任額外的背景工作節點。 節點會將其 HDFS 區塊復寫至其他在線背景工作節點。 之後,HDInsight 會安全地相應減少叢集。 HDFS 在調整作業期間進入安全模式。 HDFS 應該會在調整完成之後出現。 不過,在某些情況下,HDFS 會在調整作業期間卡在安全模式中,因為檔案區塊復寫不足。

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

當預期的區塊復本數目無法使用時,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 處於安全模式:

  • 在相應減少 HDInsight 之前,請先停止所有 Hive 作業。 或者,排程相應減少程式,以避免與執行Hive作業發生衝突。
  • 在相應減少之前,請先手動清除 HDFS 中的 Hive 臨時 tmp 目錄檔案。
  • 僅將 HDInsight 相應減少為三個背景工作節點,最小值。 避免降低為一個背景工作節點。
  • 視需要執行 命令以保持安全模式。

下列各節說明這些選項。

停止所有Hive作業

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

在調整之前停止Hive作業,有助於將 tmp 資料夾中的臨時檔數目降到最低(如果有的話)。

手動清除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已使用這些檔案完成,您可以將其移除。 請確定 Hive 沒有任何查詢正在執行,方法是在 Yarn Resource Manager UI 頁面中查看。

    從 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 叢集的特定資訊,請參閱: