Verwenden des AWS Glue Data Catalog als Metastore für Spark SQL - 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.

Verwenden des AWS Glue Data Catalog als Metastore für Spark SQL

Mit Amazon EMR ab Version 5.8.0 können Sie Spark SQL so konfigurieren, dass der AWS Glue Data Catalog als Metastore verwendet wird. Wir empfehlen diese Konfiguration, wenn Sie einen persistenten Metastore oder einen gemeinsamen Metastore für verschiedene Cluster, Services, Anwendungen oder AWS-Konten benötigen.

AWS Glue ist ein vollständig verwalteter ETL-Service (Extrahieren, Transformieren und Laden), mit dessen Hilfe einfach und wirtschaftlich Ihre Daten kategorisiert, bereinigt, erweitert und zwischen verschiedenen Datenspeichern verschieben können. Die AWS Glue Data Catalog stellt ein einheitliches Metadaten-Repository über verschiedene Datenquellen und Datenformate bereit und kann in Amazon EMR sowie Amazon RDS, Amazon Redshift, Redshift Spectrum, Athena und alle anderen mit dem Apache Hive-Metastore kompatiblen Anwendungen integriert werden. AWS Glue-Crawler können aus den Quelldaten in Amazon S3 automatisch ein Schema ableiten und die zugehörigen Metadaten in der Data Catalog speichern. Weitere Informationen über die Data Catalog finden Sie unter Populating the AWS Glue Data Catalog im AWS Glue Developer Guide.

Für AWS Glue gelten separate Gebühren. Für das Speichern der Metadaten in der Data Catalog und den Zugriff darauf gilt eine monatliche Gebühr. Pro Minute für AWS Glue ETL-Aufträge und Crawler-Laufzeit wird ein stündlicher Tarif angewendet, und pro Minute für jeden bereitgestellten Entwicklungsendpunkt ebenfalls ein stündlicher Tarif. Die Data Catalog gestattet Ihnen, bis zu einer Million Objekte gebührenfrei zu speichern. Wenn Sie mehr als eine Million Objekte speichern, fällt eine Gebühr von 1 USD für jeweils 100.000 zusätzliche Objekte an. In der Data Catalog ist ein Objekt eine Tabelle, eine Partition oder eine Datenbank. Weitere Informationen finden Sie unter Glue-Preise.

Wichtig

Wenn Sie vor dem 14. August 2017 Tabellen unter Verwendung von Amazon Athena oder Amazon Redshift Spectrum erstellt haben, werden Datenbanken und Tabellen in einem von Athena verwalteten Katalog gespeichert, der separate zur AWS Glue Data Catalog bereitgestellt wird. Um Amazon EMR in diese Tabellen zu integrieren, müssen Sie ein Upgrade auf AWS Glue Data Catalog vornehmen. Weitere Informationen finden Sie unter Schrittweises Upgrade auf den AWS Glue Data Catalog im Amazon Athena-Benutzerhandbuch.

Angeben von AWS Glue Data Catalog als Metastore

Mit der AWS Management Console-, AWS CLI- oder Amazon EMR-API können Sie die AWS Glue Data Catalog als Metastore festlegen. Wenn Sie die CLI oder API verwenden, verwenden Sie die Spark-Konfigurationsklassifizierung, um die Data Catalog anzugeben. Neben Amazon EMR 5.16.0 und höher können Sie die Konfigurationsklassifizierung verwenden, um eine Data Catalog in einem anderen AWS-Konto festzulegen. Wenn Sie die Konsole verwenden, können Sie Data Catalog unter Verwendung von Advanced Options (Erweiterte Optionen) oder Quick Options (Schnelle Optionen) angeben.

Anmerkung

Die Option zum Verwenden des AWS Glue Data Catalog ist auch mit Zeppelin verfügbar, da Zeppelin mit Spark SQL-Komponenten installiert wird.

So geben Sie den AWS Glue Data Catalog über die Konsole als Metastore für Spark SQL an

  1. Öffnen Sie die Amazon EMR-Konsole unter https://console.aws.amazon.com/elasticmapreduce.

  2. Wählen Sie Create Cluster (Cluster erstellen) und Go to advanced options (Erweiterte Optionen aufrufen) aus.

  3. Wählen Sie für Release (Version) die Option emr-5.8.0 oder höher aus.

  4. Wählen Sie unter Release eine der Optionen Spark oder Zeppelin. aus.

  5. Wählen Sie unter settings ( -Einstellungen)AWS Glue Data Catalog die Option Use for Spark table metadata (Für Spark-Tabellenmetadaten verwenden) aus.

  6. Wählen Sie nach Bedarf weitere Optionen für Ihren Cluster aus, klicken Sie auf Next (Weiter) und konfigurieren Sie weitere Cluster-Optionen entsprechend Ihrer Anwendung.

So geben Sie den AWS Glue Data Catalog über die Konfigurationsklassifizierung als Standard-Hive-Metastore an

Weitere Informationen zum Festlegen einer Konfigurationsklassifizierung mithilfe der AWS CLI bzw. der EMR-API finden Sie unter Konfigurieren von Anwendungen.

  • Geben Sie den Wert für hive.metastore.client.factory.class mit der Klassifizierung spark-hive-site an, wie in dem folgenden Beispiel gezeigt:

    [ { "Classification": "spark-hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } } ]

    Um einen Data Catalog in einem anderen AWS-Konto anzugeben, fügen Sie die hive.metastore.glue.catalogid-Eigenschaft wie in dem folgenden JSON-Beispiel gezeigt hinzu. Ersetzen Sie acct-id durch den Namen des AWS-Kontos des Data Catalog.

    [ { "Classification": "spark-hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.glue.catalogid": "acct-id" } } ]

IAM-Berechtigungen

Das EC2-Instance-Profil für einen Cluster muss IAM-Berechtigungen für AWS Glue-Aktionen besitzen. Wenn Sie für AWS Glue Data Catalog-Objekte Verschlüsselung aktivieren, muss die Rolle auch zum Verschlüsseln, Entschlüsseln und Generieren des Kundenmasterschlüssels (Customer Master Key, CMK) berechtigt sein, der zur Verschlüsselung verwendet wird.

Berechtigungen für AWS Glue-Aktionen

Die verwaltete AmazonElasticMapReduceforEC2Role-Standardrichtlinie, die EMR_EC2_DefaultRole angefügt ist, erlaubt die erforderlichen AWS Glue-Aktionen. Wenn Sie das EC2-Instance-Standardprofil verwenden, ist keine Aktion erforderlich. Wenn Sie jedoch beim Erstellen eines Clusters ein benutzerdefiniertes EC2-Instance-Profil und benutzerdefinierte Berechtigungen angeben, müssen Sie sicherstellen, dass die entsprechenden AWS Glue-Aktionen erlaubt werden. Verwenden Sie hierzu die verwaltete Richtlinie AmazonElasticMapReduceforEC2Role als Ausgangspunkt. Eine Liste der AWS Glue Aktionen finden Sie im Artikel zur Servicerolle für Cluster-EC2-Instances (EC2-Instance-Profil) im Management Guide für Amazon EMR.

Berechtigungen zum Verschlüsseln und Entschlüsseln – AWS Glue Data Catalog

In diesem Abschnitt wird die Verschlüsselungsfunktion von AWS Glue Data Catalog behandelt. Weitere Informationen zur AWS Glue Data Catalog-Verschlüsselung finden Sie unter Verschlüsseln Ihres Datenkatalogs im AWS Glue Developer Guide.

Wenn Sie für AWS Glue Data Catalog-Objekte die Verschlüsselung mittels AWS-verwalteter CMKs für AWS Glue aktivieren und sich der Cluster, der auf AWS Glue Data Catalog zugreift, im selben AWS-Konto befindet, müssen Sie die dem EC2-Instance-Profil angefügte Berechtigungsrichtlinie nicht aktualisieren. Wenn Sie einen kundenverwalteten CMK verwenden oder sich der Cluster in einem anderen AWS-Konto befindet, müssen Sie die Berechtigungsrichtlinie aktualisieren, damit das EC2-Instance-Profil zum Verschlüsseln und Entschlüsseln mittels des Schlüssels berechtigt ist. Der Inhalt der folgenden Richtlinienanweisung muss hinzugefügt werden, unabhängig davon, ob Sie die Standardberechtigungsrichtlinie, AmazonElasticMapReduceforEC2Role oder eine einem benutzerdefinierten EC2-Instance-Profil angefügte benutzerdefinierte Berechtigungsrichtlinie verwenden.

[ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:acct-id:key/12345678-1234-1234-1234-123456789012" } ] } ]

Ressourcenbasierte Berechtigungen

Falls Sie AWS Glue in Verbindung mit Hive, Spark oder Presto in Amazon EMR verwenden, unterstützt AWS Glue ressourcenbasierte Richtlinien, um den Zugriff auf Data Catalog-Ressourcen zu steuern. Diese Ressourcen beinhalten Datenbanken, Tabellen, Verbindungen und benutzerdefinierte Funktionen. Weitere Informationen finden Sie im Abschnitt AWS Glue-Ressourcenrichtlinien im AWS Glue Developer Guide.

Bei der Verwendung ressourcenbasierter Richtlinien zur Begrenzung des Zugriffs auf AWS Glue in Amazon EMR muss der von Ihnen in den Berechtigungen angegebene Prinzipal der Rollen-ARN sein, der dem EC2-Instance-Profil zugeordnet ist, das beim Erstellen eines Clusters festgelegt wird. Für eine ressourcenbasierte Richtlinie, die an einen Katalog angefügt ist, können Sie zum Beispiel den Rollen-ARN für das Standardprofil Servicerolle für EC2-Cluster-Instances angeben, EMR_EC2_DefaultRole als Principal. Verwenden Sie dazu das Format im folgenden Beispiel:

arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole

Die acct-id kann sich von der AWS Glue-Konto-ID unterscheiden. Dies ermöglicht den Zugriff von EMR-Clustern in verschiedenen Konten. Sie können mehrere Prinzipale angeben, jeden von einem anderen Konto.

Überlegungen zur Verwendung von AWS Glue Data Catalog

Beachten Sie die folgenden Elemente, wenn Sie AWS Glue Data Catalog als Metastore mit Spark verwenden:

  • Das Vorhandensein einer Standarddatenbank ohne Speicherort-URI sorgt für Fehler beim Erstellen einer Tabelle. Um dieses Problem zu umgehen, verwenden Sie die LOCATION-Klausel, um einen Bucket-Speicherort anzugeben, z. B. s3://mybucket, wenn Sie CREATE TABLE verwenden. Alternativ können Sie Tabellen innerhalb einer anderen Datenbank als der Standarddatenbank erstellen.

  • Umbenennung von Tabellen, in denen AWS Glue nicht unterstützt wird.

  • Wenn Sie eine Hive-Tabelle erstellen, ohne einen LOCATION anzugeben, werden die Tabellendaten an der durch die Eigenschaft hive.metastore.warehouse.dir angegebenen Stelle gespeichert. Standardmäßig ist dies ein Speicherort in HDFS. Wenn ein anderer Cluster auf die Tabelle zugreifen muss, schlägt dies fehl, es sei denn, es liegen ausreichende Berechtigungen für den Cluster vor, mit dem Tabelle erstellt wurde. Da der HDFS-Speicher flüchtig ist, gehen bei einer Beendigung des Clusters die Tabellendaten verloren und die Tabelle muss neu erstellt werden. Wir empfehlen beim Erstellen einer Hive-Tabelle mittels AWS Glue einen LOCATION in Amazon S3 anzugeben. Alternativ können Sie über die hive-site-Konfigurationsklassifizierung einen Speicherort in Amazon S3 für hive.metastore.warehouse.dir angeben, der für alle Hive-Tabellen gilt. Wenn eine Tabelle in einem HDFS-Speicherort erstellt wird und der Cluster, mit dem sie erstellt wurde, noch ausgeführt wird, können Sie die Tabellenposition von innerhalb von Amazon S3 auf AWS Glue aktualisieren. Weitere Informationen finden Sie unter Arbeiten mit Tabellen in der AWS Glue-Konsole im AWS Glue Developer Guide.

  • Partitionswerte, die Anführungszeichen und Apostrophe enthalten, werden nicht unterstützt (z. B. PARTITION (owner="Doe's").

  • Spaltenstatistiken werden für EMR-5.31.0 und höher unterstützt.

  • Die Verwendung einer Hive-Autorisierung wird nicht unterstützt. Denken Sie als Alternative über die Verwendung von AWS Glue-ressourcenbasierten Richtlinien nach. Weitere Informationen finden Sie unter Verwenden von ressourcenbasierten Richtlinien für Amazon EMR-Zugriff auf AWS Glue Data Catalog.

  • Hive-Einschränkungen werden nicht unterstützt.

  • Kostenbasierte Optimierung in Hive wird nicht unterstützt.

  • Die Einrichtung von hive.metastore.partition.inherit.table.properties wird nicht unterstützt.

  • Die Verwendung der folgenden Metastore-Konstanten wird nicht unterstützt: BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION.

  • Wenn Sie einen Prädikatausdruck verwenden, müssen sich explizite Werte auf der rechten Seite des Vergleichsoperators befinden, sonst schlagen Abfragen fehl.

    • Richtig: SELECT * FROM mytable WHERE time > 11

    • Falsch: SELECT * FROM mytable WHERE 11 > time

  • Die Verwendung von benutzerdefinierten Funktionen (UDFs) in Prädikatausdrücken wird nicht empfohlen. Abfragen können aufgrund der Methode fehlschlagen, wie Hive versucht, eine Abfrageausführung zu optimieren.

  • Temporäre Tabellen werden nicht unterstützt.

  • Wir empfehlen, Tabellen mithilfe von Anwendungen über Amazon EMR anstatt direkt mittels AWS Glue zu erstellen. Wenn eine Tabelle über AWS Glue erstellt wird, kann dies zu fehlenden erforderlichen Feldern und Abfrageausnahmen führen.

  • In EMR 5.20.0 oder höher wird die parallele Partitionenbereinigung für Spark und Hive automatisch aktiviert, wenn der AWS Glue-Datenkatalog als Metastore verwendet wird. Mit dieser Änderung wird die Planungszeit für Abfragen erheblich reduziert, da zum Abrufen der Partitionen mehrere Abfragen parallel ausgeführt werden. Die Gesamtzahl der Segmente, die gleichzeitig ausgeführt werden können, liegt zwischen 1 und 10. Der Standardwert beträgt 5, was eine empfohlene Einstellung ist. Sie können diesen ändern, indem Sie die Eigenschaft aws.glue.partition.num.segments in der hive-site Konfigurationsklassifizierung angeben. Wenn eine Drosselung erfolgt, können Sie die Funktion deaktivieren, indem Sie den Wert auf 1 ändern. Weitere Informationen finden Sie unter AWS Glue-Segment-Struktur.