Verwendung von S3 Select mit Hive zur Verbesserung der Leistung - Amazon EMR

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.

Verwendung von S3 Select mit Hive zur Verbesserung der Leistung

Mit Amazon EMR Version 5.18.0 und höher können Sie S3 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.

Ist S3 Select das Richtige für meine Anwendung?

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 im Entwicklerhandbuch für Amazon Simple Storage Service.

  • Ihre Netzwerkverbindung zwischen Amazon S3 und dem Amazon EMR-Cluster verfügt über eine gute Übertragungsgeschwindigkeit und verfügbare Bandbreite. Amazon S3 komprimiert keine HTTP-Antworten, so dass die Antwortgröße wahrscheinlich für komprimierte Eingabedateien zunimmt.

Überlegungen und Einschränkungen

  • Amazon S3Die -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. Mehrzeilige 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 im Entwicklerhandbuch für Amazon Simple Storage Service.

Angeben von S3 Select in Ihrem Code

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.

Beispiel 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" );

Beispiel 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" );

Beispiel SELECT TABLE-Anweisung

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