Using the AWS Glue Data Catalog as the Metastore for Hive - 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.

Using the AWS Glue Data Catalog as the Metastore for Hive

In Amazon EMR Version 5.8.0 oder höher können Sie Hive für die Verwendung von AWS Glue Data Catalog als Metastore konfigurieren. 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.

Specifying AWS Glue Data Catalog as the 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 Hive-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

Data Catalog kann ebenfalls mit HCatalog verwendet werden, da Hive mit HCatalog installiert wird.

So geben Sie den AWS Glue Data Catalog mit der Konsole als Metastore 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 die Option emr-5.8.0 oder höher aus.

  4. Wählen Sie unter Release (Version) entweder Hive (Hive) oder HCatalog (HCatalog) aus.

  5. Wählen Sie in AWS Glue Data Catalog settings (&GLUDCLong;-Einstellungen) die Option Use for Hive table metadata (Für Hive-Tabellenmetadaten verwenden) aus.

  6. Wählen Sie weitere Optionen für Ihren Cluster nach Bedarf aus, wählen Sie Next (Weiter) aus und konfigurieren Sie dann weitere Cluster-Optionen gemäß 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 mittels der Konfigurationsklassifizierung hive-site wie im folgenden Beispiel gezeigt an:

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

    Bei EMR Release Version 5.28.0, 5.28.1 oder 5.29.0, wenn Sie einen Cluster mit dem AWS-Klebstoff erstellen Data Catalog als Metastore hive.metastore.schema.verification bis false. Dies verhindert Hive und hcatalog, das Metastore-Schema gegen mysql zu validieren. Ohne diese Konfiguration wird die Master-Instance-Gruppe nach der Neukonfiguration in Hive oder HCatalog gesperrt. Sehen Sie sich das folgende -Beispiel an.

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

    Wenn Sie bereits über einen Cluster in EMR-Version 5.28.0, 5.28.1 oder 5.29.0 verfügen, können Sie die Master-Instance-Gruppe hive.metastore.schema.verification mit folgenden Informationen auf false festlegen:

    Classification = hive-site Property = hive.metastore.schema.verification Value = false

    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": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.schema.verification": "false" "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.

Considerations When Using AWS Glue Data Catalog

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

  • Adding auxiliary JARs using the Hive shell is not supported. As a workaround, use the hive-site configuration classification to set the hive.aux.jars.path property, which adds auxiliary JARs into the Hive classpath.

  • Hive transactions are not supported.

  • 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.