Anleitung für die Leistungsoptimierung für Hive in HDInsight und Azure Data Lake Storage Gen1

Die Standardeinstellungen bieten eine gute Leistung für viele verschiedene Anwendungsfälle. Für E/A-intensive Abfragen kann Hive optimiert werden, um eine bessere Leistung mit Azure Data Lake Storage Gen1 zu bieten.

Voraussetzungen

Parameter

Im Folgenden finden Sie die wichtigsten Einstellungen für die Optimierung der Data Lake Storage Gen1-Leistung:

  • hive.tez.container.size – die von jedem Task verwendete Arbeitsspeichermenge

  • tez.grouping.min-size – die Mindestgröße jedes Mappers

  • tez.grouping.max-size – die maximale Größe jedes Mappers

  • hive.exec.reducer.bytes.per.reducer – die Größe jedes Reducers

hive.tez.container.size: Die Containergröße bestimmt die Menge an Arbeitsspeicher, die für jeden Task verfügbar ist. Dies ist die wichtigste Information für die Steuerung der Parallelität in Hive.

tez.grouping.min-size: Dieser Parameter ermöglicht es Ihnen, die Mindestgröße jedes Mappers festzulegen. Wenn die Anzahl von Mappern, die Tez auswählt, kleiner ist als der Wert dieses Parameters, verwendet Tez den hier festgelegten Wert.

tez.grouping.max-size: Dieser Parameter ermöglicht es Ihnen, die maximale Größe jedes Mappers festzulegen. Wenn die Anzahl von Mappern, die Tez auswählt, größer ist als der Wert dieses Parameters, verwendet Tez den hier festgelegten Wert.

hive.exec.reducer.bytes.per.reducer: Dieser Parameter legt die Größe jedes Reducers fest. Standardmäßig ist jeder Reducer 256 MB groß.

Anleitungen

Set hive.exec.reducer.bytes.per.reducer: Der Standardwert funktioniert gut, wenn die Daten nicht komprimiert sind. Bei komprimierten Daten sollten Sie den Reducer verkleinern.

Set hive.tez.container.size: Der Arbeitsspeicher wird in jedem Knoten von „yarn.nodemanager.resource.memory-mb“ angegeben und sollte im HDI-Cluster standardmäßig richtig festgelegt sein. Weitere Informationen zum Festlegen des geeigneten Speichers in YARN finden Sie in diesem Beitrag.

E/A-intensive Workloads können von einem höheren Maß an Parallelität profitieren, indem Sie die Größe der Tez-Container reduzieren. So können Benutzer mehr Container verwenden, wodurch die Parallelität verbessert wird. Einige Hive-Abfragen erfordern sehr viel Arbeitsspeicher (z.B. MapJoin). Wenn der Task nicht über genügend Arbeitsspeicher verfügt, wird zur Laufzeit eine Ausnahme wegen unzureichenden Arbeitsspeichers angezeigt. Wenn Sie eine solche Ausnahme erhalten, sollten Sie den Arbeitsspeicher vergrößern.

Die Anzahl von gleichzeitigen Tasks bzw. die Parallelität wird durch die Gesamtmenge an YARN-Arbeitsspeicher begrenzt. Die Anzahl von YARN-Containern bestimmt, wie viele gleichzeitige Tasks ausgeführt werden können. Die Menge an YARN-Arbeitsspeicher pro Knoten finden Sie bei Ambari. Navigieren Sie zu YARN, und zeigen Sie die Registerkarte für die Konfiguration an. Die Größe des YARN-Arbeitsspeichers wird in diesem Fenster angezeigt.

Gesamter YARN-Arbeitsspeicher = Knoten × YARN-Arbeitsspeicher pro Knoten. Anzahl der YARN-Container = gesamter YARN-Arbeitsspeicher / Tez-Containergröße

Entscheidend für die Verbesserung der Leistung bei Data Lake Storage Gen1 ist es, die Parallelität so weit wie möglich zu erhöhen. Tez berechnet automatisch die Anzahl von Tasks, die erstellt werden müssen – darum müssen Sie sich nicht kümmern.

Beispielberechnung

Angenommen, Sie haben einen D14-Cluster mit 8 Knoten.

Gesamter YARN-Arbeitsspeicher = Knoten × YARN-Arbeitsspeicher pro Knoten. Gesamter YARN-Arbeitsspeicher = 8 Knoten × 96 GB = 768 GB. Anzahl der YARN-Container = 768 GB / 3.072 MB = 256

Einschränkungen

Data Lake Storage Gen1-Einschränkung

Wenn Sie die Data Lake Storage Gen1-Grenzwerte für die Bandbreite erreichen, treten Aufgabenfehler auf. Dies lässt sich durch Beobachten der Drosselungsfehler in den Taskprotokollen ermitteln. Sie können die Parallelität verringern, indem Sie die Tez-Containergröße erhöhen. Wenn Sie für einen Auftrag mehr Parallelität benötigen, können Sie sich an uns wenden.

Um zu prüfen, ob eine Drosselung vorliegt, müssen Sie die Debugprotokollierung auf Clientseite aktivieren. Gehen Sie hierzu wie folgt vor:

  1. Fügen Sie folgende Eigenschaft in die log4j-Eigenschaften in der Hive-Konfigurationsdatei ein. Dies kann über die Ambari-Ansicht erfolgen: log4j.logger.com.microsoft.azure.datalake.store=DEBUG. Starten Sie alle Knoten und Dienste neu, damit die Konfiguration wirksam wird.

  2. Wenn eine Drosselung vorliegt, wird in der Hive-Protokolldatei ein HTTP 429-Fehlercode angezeigt. Die Hive-Protokolldatei befindet sich hier: /tmp/<Benutzer>/hive.log.

Weitere Informationen zur Hive-Optimierung

Diese Blogs können Sie bei der Optimierung Ihrer Hive-Abfragen unterstützen: