

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verbessern der Hive-Leistung
<a name="emr-hive-s3-performance"></a>

Amazon EMR bietet Features, mit denen die Leistung optimiert werden kann, wenn Hive für Abfragen und Lese- bzw. Schreiboperationen über Daten in Amazon S3 verwendet wird.

S3 Select kann in einigen Anwendungen die Abfrageleistung bei CSV- und JSON-Dateien verbessern, indem die Verarbeitung an Amazon S3 ausgelagert wird.

Der EMRFS S3-optimierte Committer ist eine Alternative zu dieser [OutputCommitter](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/OutputCommitter.html)Klasse, die Auflisten- und Umbenennungsvorgänge überflüssig macht, um die Leistung beim Schreiben von Dateien in Amazon S3 mit EMRFS zu verbessern.

**Topics**
+ [Aktivierung des optimierten Hive EMRFS S3 Committers](hive-optimized-committer.md)
+ [Verwendung von S3 Select mit Hive zur Verbesserung der Leistung](emr-hive-s3select.md)
+ [MSCK-Optimierung](emr-msck-optimization.md)

# Aktivierung des optimierten Hive EMRFS S3 Committers
<a name="hive-optimized-committer"></a>

Der Hive EMRFS S3 Optimized Committer ist eine alternative Methode, mit der EMR Hive Dateien für Insert-Abfragen schreibt, wenn EMRFS verwendet wird. Der Committer macht Listen- und Umbenennungsvorgänge überflüssig, die in Amazon S3 ausgeführt wurden, und verbessert die Leistung der Anwendung. Das Feature ist ab EMR 5.34 und EMR 6.5 verfügbar.

## Aktivieren des Committers
<a name="enabling-hive-committer"></a>

Wenn Sie die Verwendung von EMR Hive `HiveEMRFSOptimizedCommitter` zum Commit von Daten als Standard für alle von Hive verwalteten und externen Tabellen aktivieren möchten, verwenden Sie die folgende `hive-site`-Konfiguration in EM- 6.5.0- oder EMR-5.34.0-Clustern.

```
[
   {
      "classification": "hive-site",
      "properties": {
         "hive.blobstore.use.output-committer": "true"
      }
   }
]
```

**Anmerkung**  
Schalten Sie dieses Feature nicht ein, wenn `hive.exec.parallel` auf `true` eingestellt ist.

## Einschränkungen
<a name="hive-committer-limitations"></a>

Die folgenden grundlegenden Einschränkungen gelten für Tags (Markierungen):
+ Die Aktivierung von Hive für das automatische Zusammenführen kleiner Dateien wird nicht unterstützt. Die standardmäßige Hive-Commit-Logik wird auch dann verwendet, wenn der optimierte Committer aktiviert ist.
+ Hive-ACID-Tabellen werden nicht unterstützt. Die standardmäßige Hive-Commit-Logik wird auch dann verwendet, wenn der optimierte Committer aktiviert ist.
+ Die Benennungsnomenklatur für geschriebene Dateien wurde von Hives von `<task_id>_<attempt_id>_<copy_n>` auf `<task_id>_<attempt_id>_<copy_n>_<query_id>` geändert. Zum Beispiel eine Datei mit dem Namen 

  `s3://warehouse/table/partition=1/000000_0` wird geändert zu `s3://warehouse/table/partition=1/000000_0-hadoop_20210714130459_ba7c23ec-5695-4947-9d98-8a40ef759222-1`. Das `query_id` hier ist eine Kombination aus Benutzername, Zeitstempel und UUID.
+ Wenn sich benutzerdefinierte Partitionen auf verschiedenen Dateisystemen (HDFS, S3) befinden, wird dieses Feature automatisch deaktiviert. Wenn sie aktiviert ist, wird die standardmäßige Hive-Commit-Logik verwendet.

# Verwendung von S3 Select mit Hive zur Verbesserung der Leistung
<a name="emr-hive-s3select"></a>

**Wichtig**  
Amazon S3 Select ist für Neukunden nicht mehr verfügbar. Bestandskunden von Amazon S3 Select können das Feature weiterhin wie gewohnt nutzen. [Weitere Informationen](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Mit Amazon-EMR-Version 5.18.0 und höher können Sie [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/) mit Hive auf Amazon EMR verwenden. S3 Select ermöglicht es Anwendungen, nur eine Teilmenge von Daten aus einem Objekt abzurufen. Bei Amazon EMR wird die numerische Arbeit zur Filterung großer Datensätze von dem Cluster an Amazon S3 ausgelagert. Dies kann die Leistung in einigen Anwendungen verbessern und reduziert die Menge der zwischen Amazon EMR und Amazon S3 übertragenen Daten.

S3 Select wird mit Hive-Tabellen auf der Grundlage von CSV- und JSON-Dateien und durch die Einstellung der Konfigurationsvariablen `s3select.filter` auf `true` während der Hive-Sitzung unterstützt. Weitere Informationen und Beispiele finden Sie unter [Angeben von S3 Select in Ihrem Code](#emr-hive-s3select-specify).

## Ist S3 Select das Richtige für meine Anwendung?
<a name="emr-hive-s3select-apps"></a>

Wir empfehlen, dass Sie Benchmark-Tests für Ihre Anwendungen im Vergleich mit und ohne S3 Select durchführen, um zu sehen, ob es für Ihre Anwendung geeignet sein könnte.

Verwenden Sie die folgenden Richtlinien, um zu bestimmen, ob Ihre Anwendung ein Kandidat für die Verwendung von S3 ist:
+ Ihre Abfrage filtert mehr als die Hälfte des ursprünglichen Datensatzes.
+ Ihre Abfrage-Filterprädikate verwenden Spalten mit einem Datentyp, der von Amazon S3 Select unterstützt wird. Weitere Informationen finden Sie unter [Datentypen](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) im *Benutzerhandbuch für Amazon Simple Storage Service*.
+ Ihre Netzwerkverbindung zwischen Amazon S3 und dem Amazon-EMR-Cluster hat eine gute Übertragungsgeschwindigkeit und verfügbare Bandbreite. Amazon S3 komprimiert keine HTTP-Antworten, sodass die Antwortgröße bei komprimierten Eingabedateien wahrscheinlich zunimmt.

## Überlegungen und Einschränkungen
<a name="emr-hive-s3select-considerations"></a>
+ Die Amazon-S3-serverseitige Verschlüsselung mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln (SSE-C) und die clientseitige Verschlüsselung werden nicht unterstützt. 
+ Die Eigenschaft `AllowQuotedRecordDelimiters` wird nicht unterstützt. Wenn diese Eigenschaft angegeben ist, schlägt die Abfrage fehl.
+ Nur CSV- und JSON-Dateien im UTF-8-Format werden unterstützt. Mehrzeilig CSVs und JSON werden nicht unterstützt.
+ Nur unkomprimierte oder gzip- oder bzip2-Dateien werden unterstützt.
+ Kommentarzeichen auf der letzten Zeile werden nicht unterstützt.
+ Leere Zeilen am Ende einer Datei werden nicht verarbeitet.
+ Hive auf Amazon EMR unterstützt die primitiven Datentypen, die S3 Select unterstützt. Weitere Informationen finden Sie unter [Datentypen](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) im *Benutzerhandbuch für Amazon Simple Storage Service*.

## Angeben von S3 Select in Ihrem Code
<a name="emr-hive-s3select-specify"></a>

Um S3 Select in Ihrer Hive-Tabelle zu verwenden, erstellen Sie die Tabelle durch Angabe von `com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat` als `INPUTFORMAT`-Klassenname, und geben Sie einen Wert für die Eigenschaft `s3select.format` mit der `TBLPROPERTIES`-Klausel an.

S3 Select ist standardmäßig deaktiviert, wenn Sie Abfragen ausführen. Aktivieren Sie S3 Select, indem Sie `s3select.filter` auf `true` in Ihrer Hive-Sitzung setzen, wie unten gezeigt. Die folgenden Beispiele zeigen, wie Sie S3 Select angeben, wenn Sie eine Tabelle aus CSV- und JSON-Dateien erstellen und anschließend die Tabelle mit einer einfachen Select-Anweisung abfragen.

**Example CREATE-TABLE-Anweisung für CSV-basierte Tabelle**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/mycsvfile/'
TBLPROPERTIES (
  "s3select.format" = "csv",
  "s3select.headerInfo" = "ignore"
);
```

**Example CREATE-TABLE-Anweisung für JSON-basierte Tabelle**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/json/'
TBLPROPERTIES (
  "s3select.format" = "json"
);
```

**Example SELECT-TABLE-Anweisung**  

```
SET s3select.filter=true;
SELECT * FROM mys3selecttable WHERE col2 > 10;
```

# MSCK-Optimierung
<a name="emr-msck-optimization"></a>

Hive speichert eine Liste von Partitionen für jede Tabelle in seinem Metastore. Wenn Partitionen jedoch direkt zum Dateisystem hinzugefügt oder daraus entfernt werden, bemerkt der Hive-Metastore diese Änderungen nicht. Der [MSCK-Befehl](https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)) aktualisiert die Partitionsmetadaten im Hive-Metastore für Partitionen, die direkt zum Dateisystem hinzugefügt oder daraus entfernt wurden. Die Syntax für den Befehl lautet:

```
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
```

Hive implementiert diesen Befehl wie folgt:

1. Hive ruft alle Partitionen für die Tabelle aus dem Metastore ab. Aus der Liste der Partitionspfade, die im Dateisystem nicht existieren, wird dann eine Liste von Partitionen erstellt, die aus dem Metastore gelöscht werden sollen.

1. Hive sammelt die im Dateisystem vorhandenen Partitionspfade, vergleicht sie mit der Liste der Partitionen aus dem Metastore und generiert eine Liste von Partitionen, die dem Metastore hinzugefügt werden müssen.

1. Hive aktualisiert den Metastore im Modus `ADD`, `DROP` oder `SYNC`.

**Anmerkung**  
Wenn der Metastore viele Partitionen enthält, dauert die Ausführung des Schritts zur Überprüfung, ob eine Partition nicht im Dateisystem existiert, sehr lange, da der `exists`-API-Aufruf des Dateisystems für jede Partition erfolgen muss.

In Amazon EMR 6.5.0 führte Hive ein Flag mit dem Namen `hive.emr.optimize.msck.fs.check` ein. Wenn diese Option aktiviert ist, überprüft Hive anhand der Liste der Partitionspfade aus dem Dateisystem, die in Schritt 2 oben generiert wurde, ob eine Partition vorhanden ist, anstatt Dateisystem-API-Aufrufe durchzuführen. In Amazon EMR 6.8.0 hat Hive diese Optimierung standardmäßig aktiviert, sodass das Flag `hive.emr.optimize.msck.fs.check` nicht mehr gesetzt werden muss.