HDInsight 和 Azure Data Lake Storage Gen1 上的 Hive 效能微調指導方針

預設設定已設定好,以便在許多不同的使用案例中提供良好的效能。 針對 I/O 密集的查詢,Hive 可進行微調,以在 Azure Data Lake Storage Gen1 取得更佳效能。

必要條件

參數

以下是要改善 Data Lake Storage Gen1 效能所應微調的最重要設定:

  • hive.tez.container.size – 每個工作所使用的記憶體數量

  • tez.grouping.min-size – 每個對應器的大小下限

  • tez.grouping.max-size – 每個對應器的大小上限

  • hive.exec.reducer.bytes.per.reducer – 每個歸納器的大小

hive.tez.container.size - 容器大小會決定每個工作可以使用多少記憶體。 這是用來控制 Hive 中之並行能力的主要輸入。

tez.grouping.min-size – 此參數可讓您設定每個對應器的大小下限。 如果 Tez 選擇的對應器數目小於此參數的值,Tez 會使用此處設定的值。

tez.grouping.max-size – 此參數可讓您設定每個對應器的大小上限。 如果 Tez 選擇的對應器數目大於此參數的值,Tez 會使用此處設定的值。

hive.exec.reducer.bytes.per.reducer – 此參數會設定每個歸納器的大小。 根據預設,每個歸納器為 256 MB。

指引

Set hive.exec.reducer.bytes.per.reducer – 資料若未壓縮,預設值就很適用。 資料若有壓縮,則應縮減歸納器的大小。

Set hive.tez.container.size – 在每個節點中,記憶體會由 yarn.nodemanager.resource.memory-mb 指定,且預設應該會在 HDI 叢集上正確設定。 如需在 YARN 中設定適當記憶體的詳細資訊,請參閱這篇文章

I/O 密集工作負載可以透過減少 Tez 容器大小,而從更符合平行處理原則受益。 這會讓使用者獲得更多容器,而增加並行能力。 不過,某些 Hive 查詢需要大量的記憶體 (例如 MapJoin)。 如果工作沒有足夠的記憶體,您會在執行階段期間遇到記憶體不足的例外狀況。 如果您遇到記憶體不足的例外狀況,則應增加記憶體。

並行執行的工作數或平行處理原則會受到 YARN 記憶體總數的限制。 YARN 容器數目會決定可以執行多少並行工作。 若要尋找每個節點的 YARN 記憶體,您可以前往 Ambari。 瀏覽至 YARN,然後檢視 [設定] 索引標籤。YARN 記憶體會顯示在此視窗中。

YARN 記憶體總計 = 節點 *每個節點的 YARN 記憶體,YARN 容器數目 = YARN 記憶體總數/Tez 容器大小

使用 Data Lake Storage Gen1 來改善效能的關鍵是盡可能地增加並行能力。 Tez 會自動計算應該建立的工作數目,因此您並不需要設定。

範例計算

假設您有 8 節點的 D14 叢集。

YARN 記憶體總計 = 節點 * 每個節點的 YARN 記憶體總計,YARN 記憶體總計 = 8 個節點 * 96GB = 768GB,YARN 容器數目 = 768GB / 3072MB = 256

限制

Data Lake Storage Gen1 節流

如果您達到 Data Lake Storage Gen1 所提供的頻寬限制,則會開始看到工作失敗。 透過觀察工作記錄中的節流錯誤即可加以識別。 您可以藉由增加 Tez 容器大小來減少平行處理原則。 如果您的作業需要更多並行能力,請與我們連絡。

若要檢查您是否遭到節流,您必須在用戶端啟用偵錯記錄。 做法如下:

  1. 將下列屬性放在 Hive 組態的 log4j 屬性中。這可以透過 Ambari 檢視完成:log4j.logger.com.microsoft.azure.datalake.store=DEBUG 重新開機所有節點/服務,讓組態生效。

  2. 如果您遭到節流,您會看到 Hive 記錄檔中有 HTTP 429 錯誤碼。 Hive 記錄檔位於 /tmp/<user>/hive.log

關於微調 Hive 的進一步資訊

以下是一些有助於微調 Hive 查詢的部落格︰