HDInsight 和 Azure Data Lake Storage Gen1 上的 Hive 效能微調指引
默認設定已設定為在許多不同的使用案例中提供良好的效能。 針對需要大量 I/O 的查詢,Hive 可以調整為使用 Azure Data Lake Storage Gen1 取得更佳的效能。
先決條件
- Azure 訂用帳戶。 請參閱取得 Azure 免費試用。
- Data Lake Storage Gen1 帳戶。 如需建立帳戶的指示,請參閱開始使用 Azure Data Lake Storage Gen1
- 具有 Data Lake Storage Gen1 帳戶存取權的 Azure HDInsight 叢集。 請參閱 使用 Data Lake Storage Gen1建立 HDInsight 叢集。 請確實為叢集啟用遠端桌面。
- 在 HDInsight 上執行 Hive。 若要瞭解如何在 HDInsight 上執行 Hive 作業,請參閱 在 HDInsight 上使用 Hive
- Data Lake Storage Gen1 的效能微調指導方針。 如需一般效能概念,請參閱 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 – 此參數會設定每個歸納器的大小。 根據預設,每個化簡器都是 256MB。
指導
設定hive.exec.reducer.bytes.per.reducer – 未壓縮數據時,預設值可正常運作。 針對壓縮的數據,您應該減少縮減器的大小。
設定 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 記憶體總計 = 8 個節點 * 96GB = 768GB YARN 容器數目 = 768GB / 3072MB = 256
局限性
Data Lake Storage Gen1 節流
如果您達到 Data Lake Storage Gen1 所提供的頻寬限制,您就會開始看到工作失敗。 這可以藉由觀察工作記錄中的節流錯誤來識別。 您可以藉由增加 Tez 容器大小來減少並行性。 如果您需要更多並行處理作業,請與我們連絡。
若要檢查您是否受到頻寬限制,您必須在用戶端上啟用除錯記錄。 以下是您可以執行此動作的方式:
將下列屬性放在 Hive 配置的 log4j 屬性中。這可以在 Ambari 介面中完成:log4j.logger.com.microsoft.azure.datalake.store=DEBUG 重新啟動所有節點/服務後,配置才會生效。
如果您受到限流,您會在 hive 記錄檔中看到 HTTP 429 錯誤碼。 hive 記錄檔位於 /tmp/<user>/hive.log
有關 Hive 調整的進一步資訊
以下是一些部落格,可協助您調整Hive查詢:
- 在 HDInsight 中優化 Hadoop 的 Hive 查詢
- 在 Azure HDInsight 中編碼 Hive 查詢檔案
- 在 HDInsight 上優化 Hive 的 Ignite 簡報