Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Wie verwende ich Hive und Spark in Amazon EMR, um einen Datenkatalog abzufragen, der sich in einem anderen Konto befindet?
Ich möchte Apache Hive und Apache Spark verwenden, um auf den AWS-Glue-Datenkatalog eines anderen AWS-Kontos in Amazon EMR zuzugreifen und ihn abzufragen.
Kurzbeschreibung
Um dynamisch auf den Datenkatalog in verschiedenen Konten zuzugreifen, gib die Eigenschaft aws.glue.catalog.separator in deinen Hive- oder Spark-Konfigurationen an. Du kannst in deinen Konfigurationen auch die Eigenschaft hive.metastore.glue.catalogid angeben, um auf einen bestimmten Datenkatalog in einem anderen Konto zuzugreifen.
Lösung
Gewähre kontoübergreifenden Zugriff auf AWS Glue. Stelle sicher, dass der Amazon Simple Storage Service (Amazon S3)-Bucket, auf den die AWS-Glue-Tabellen verweisen, für den kontoübergreifenden Zugriff konfiguriert ist. Weitere Informationen findest du unter Wie richte ich den kontoübergreifenden Zugriff für das EMR-Dateisystem ein?
Dynamischer Zugriff auf den Datenkatalog in verschiedenen Konten
Konfigurationsänderungen auf einen neuen Cluster anwenden
Wenn du einen EMR-Cluster startest, füge ein Konfigurationsobjekt hinzu, das dem folgenden Beispiel ähnelt. Weitere Informationen findest du unter Konfigurieren von Anwendungen beim Erstellen eines Clusters.
[ { "Classification": "hive-site", "Properties": { "aws.glue.catalog.separator": "/", "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } }, { "Classification": "spark-hive-site", "Properties": { "aws.glue.catalog.separator": "/", "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } } ]
Konfigurationsänderungen auf einen laufenden Cluster anwenden
Führe die folgenden Schritte aus:
- Öffne die Amazon EMR-Konsole.
- Wähle in der Clusterliste unter Cluster-ID den aktiven Cluster aus, den du neu konfigurieren möchtest.
- Wähle auf der Seite mit den Cluster-Details den Tab Anwendungen aus.
- Wähle unter Instance-Gruppenkonfigurationen die Instance-Gruppe aus und wähle dann Neu konfigurieren aus.
- Wähle Neue Konfiguration hinzufügen aus und gib dann die folgenden Informationen ein:
Gib für Klassifizierung hive-site ein.
Gib für Eigenschaft aws.glue.catalog.separator ein.
Gib für Wert / ein.
Gib für Klassifizierung hive-site ein.
Gib für Eigenschaft hive.metastore.client.factory.class ein.
Gib für Wert com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory ein.
Gib für Klassifizierung spark-hive-site ein.
Gib für Eigenschaft aws.glue.catalog.separator ein.
Gib für Wert / ein.
Gib für Klassifizierung spark-hive-site ein.
Gib für Eigenschaft hive.metastore.client.factory.class ein.
Gib für Wert com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory ein. - Wähle Diese Konfiguration auf alle aktiven Instance-Gruppen anwenden und dann Änderungen speichern aus. Weitere Informationen findest du unter Eine Instance-Gruppe in einem laufenden Cluster neu konfigurieren.
Tabellen in einem anderen Konto abfragen
Hinweis: Wenn du Spark-Jobs auf Amazon EMR Version 6.5 ausführst, übergib die Konfigurationseigenschaft spark.sql.catalogImplementation=HIVE. Weitere Informationen findest du unter Dynamisches Laden von Spark-Eigenschaften auf der Apache Spark-Website.
Um eine Tabelle abzufragen, die sich in einem anderen Konto befindet, gib die Kontonummer in der Abfrage an. Die Kontonummer entspricht der Katalog-ID. Um beispielsweise demodb.tab1 im Konto 111122223333 abzufragen, führe den folgenden Befehl aus.
Hive:
SELECT * FROM `111122223333/demodb.tab1` LIMIT 5;
Spark:
spark.sql("SELECT * FROM `111122223333/demodb`.tt1 LIMIT 5").show()
Führe den vorhergehenden Spark-Befehl im spark-submit-Skript oder als Notebook-Shell-Befehl aus.
Du kannst auch Tabellen aus zwei Katalogen verbinden.
Hive:
SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2
Spark:
spark.sql(SELECT * FROM `111122223333/demodb.tab1` t1 INNER JOIN `444455556666/demodb.tab2` t2 ON t1.col1 = t2.col2).show()
Führe den vorhergehenden Spark-Befehl im spark-submit-Skript oder als Notebook-Shell-Befehl aus.
In einem anderen Konto auf einen bestimmten Datenkatalog zugreifen
Konfigurationsänderungen auf einen neuen Cluster anwenden
Wenn du einen EMR-Cluster startest, füge ein Konfigurationsobjekt hinzu, das dem folgenden Beispiel ähnelt. Weitere Informationen findest du unter Konfigurieren von Anwendungen beim Erstellen eines Clusters.
[ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.glue.catalogid": "account-id" } }, { "Classification": "spark-hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "hive.metastore.glue.catalogid": "account-id" } } ]
Konfigurationsänderungen auf einen laufenden Cluster anwenden
Führe die folgenden Schritte aus:
- Öffne die Amazon EMR-Konsole.
- Wähle in der Clusterliste unter Cluster-ID den aktiven Cluster aus, den du neu konfigurieren möchtest.
- Wähle auf der Seite mit den Cluster-Details den Tab Anwendungen aus.
- Wähle unter Instance-Gruppenkonfigurationen die Instance-Gruppe aus und wähle dann Neu konfigurieren aus.
- Wähle Neue Konfiguration hinzufügen aus und gib dann die folgenden Informationen ein:
Gib für Klassifizierung hive-site ein.
Gib für Eigenschaft hive.metastore.glue.catalogid ein.
Gib für Wert account-id ein.
Gib für Klassifizierung hive-site ein.
Gib für Eigenschaft hive.metastore.client.factory.class ein.
Gib für Wert com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory ein.
Gib für Klassifizierung spark-hive-site ein.
Gib für Eigenschaft hive.metastore.glue.catalogid ein.
Gib für Wert account-id ein.
Gib für Klassifizierung spark-hive-site ein.
Gib für Eigenschaft hive.metastore.client.factory.class ein.
Gib für Wert com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory ein. - Überprüfe Diese Konfiguration auf alle aktiven Instance-Gruppen anwenden und wähle dann Änderungen speichern aus. Weitere Informationen findest du unter Eine Instance-Gruppe in einem laufenden Cluster neu konfigurieren.
Tabellen in einem anderen Konto abfragen
Um Tabellen abzufragen, die im angegebenen Datenkatalog gespeichert sind, führe einen Befehl aus, der dem folgenden Beispiel ähnelt.
Hive:
SELECT * FROM `demodb.tab1` LIMIT 5;
Spark:
spark.sql("SELECT * FROM `demodb`.tt1 LIMIT 5").show()
- Themen
- Analytics
- Tags
- Amazon EMR
- Sprache
- Deutsch
