Amazon Athena HBase Konnektor
Der Amazon-Athena-HBase-Konnektor ermöglicht Amazon Athena die Kommunikation mit Ihren Apache-HBase-Instances, sodass Sie Ihre HBase-Daten mit SQL abfragen können.
Im Gegensatz zu herkömmlichen relationalen Datenspeichern haben HBase-Sammlungen kein festgelegtes Schema. HBase hat keinen Metadatenspeicher. Jeder Eintrag in eine HBase-Sammlung kann unterschiedliche Felder und Datentypen haben.
Der HBase-Konnektor unterstützt zwei Mechanismen zum Generieren von Tabellenschemainformationen: grundlegende Schemainferenz und AWS Glue Data Catalog-Metadaten.
Die Schemainferenz ist die Standardeinstellung. Mit dieser Option werden eine kleine Anzahl von Dokumenten in Ihrer Sammlung gescannt, eine Vereinigung aller Felder gebildet und Felder mit nicht überlappenden Datentypen erwzungen. Diese Option eignet sich gut für Sammlungen, die größtenteils einheitliche Einträge haben.
Für Sammlungen mit einer größeren Vielfalt an Datentypen unterstützt der Konnektor das Abrufen von Metadaten aus dem AWS Glue Data Catalog. Wenn der Konnektor eine AWS Glue-Datenbank und -Tabelle findet, die Ihrem HBase-Namensbereich und Ihren -Sammlungsnamen entsprechen, erhält er seine Schemainformationen von den entsprechenden AWS Glue-Tabelle. Wenn Sie Ihre AWS Glue-Tabelle erstellen, wird empfohlen, dass Sie sie zu einer Übergruppe aller Felder machen, auf die Sie möglicherweise von Ihrer HBase-Sammlung aus zugreifen möchten.
Wenn Sie Lake Formation in Ihrem Konto aktiviert haben, muss die IAM-Rolle für Ihren Athena-Verbund-Lambda-Konnektor, den Sie im AWS Serverless Application Repository bereitstellen, in Lake Formation über Lesezugriff auf das AWS Glue Data Catalog verfügen.
Dieser Connector kann bei Glue-Datenkatalog als Verbundkatalog registriert werden. Er unterstützt in Lake Formation definierte Datenzugriffskontrollen auf Katalog-, Datenbank-, Tabellen-, Spalten-, Zeilen- und Tagebene. Dieser Konnektor verwendet Glue Connections, um die Konfigurationseigenschaften in Glue zu zentralisieren.
Voraussetzungen
Stellen Sie den Konnektor für Ihr AWS-Konto mithilfe der Athena-Konsole oder AWS Serverless Application Repository bereit. Weitere Informationen finden Sie unter Eine Datenquellenverbindung erstellen oder Verwenden Sie AWS Serverless Application Repository, um einen Datenquellen-Konnektor bereitzustellen.
Parameter
Verwenden Sie die Parameter in diesem Abschnitt, um den HBase-Konnektor zu konfigurieren.
Anmerkung
Athena-Datenquellenkonnektoren, die am 3. Dezember 2024 und später erstellt wurden, verwenden AWS Glue-Verbindungen.
Die unten aufgeführten Parameternamen und Definitionen beziehen sich auf Athena-Datenquellen-Connectors, die vor dem 3. Dezember 2024 erstellt wurden. Diese können von ihren entsprechenden AWS Glue-Verbindungseigenschaften abweichen. Verwenden Sie ab dem 3. Dezember 2024 die folgenden Parameter nur, wenn Sie eine frühere Version eines Athena-Datenquellen-Connectors manuell bereitstellen.
Wir empfehlen, dass Sie einen HBase-Connector mithilfe eines Glue-Connections-Objekts konfigurieren. Setzen Sie dazu die glue_connection-Umgebungsvariable des HBase-Konnektors Lambda auf den Namen der zu verwendenden Glue-Connection.
Eigenschaften von Glue Connections
Verwenden Sie den folgenden Befehl, um das Schema für ein Glue-Connection-Objekt zu erhalten. Dieses Schema enthält alle Parameter, mit denen Sie Ihre Verbindung steuern können.
aws glue describe-connection-type --connection-type HBASE
Lambda-Umgebungseigenschaften
-
glue_connection – Gibt den Namen der Glue-Connection an, die dem Verbund-Connector zugeordnet ist.
Anmerkung
-
Alle Konnektoren, die Glue Connections verwenden, müssen AWS Secrets Manager zum Speichern von Anmeldeinformationen verwenden.
-
Der mit Glue-Connection erstellte HBase-Connector unterstützt die Verwendung eines Multiplexing-Handlers nicht.
-
Der mit Glue-Verbindungen erstellte HBase-Konnektor unterstützt nur
ConnectionSchemaVersion2.
-
spill_bucket – Gibt den Amazon S3-Bucket für Daten an, die die Lambda-Funktionsgrenzen überschreiten.
-
spill_prefix – (Optional) Ist standardmäßig ein Unterordner im angegebenen
spill_bucketgenanntathena-federation-spill. Wir empfehlen Ihnen, einen Amazon-S3-Speicher-Lebenszyklus an dieser Stelle zu konfigurieren, um die Überlaufe zu löschen, die älter als eine festgelegte Anzahl von Tagen oder Stunden sind. -
spill_put_request_headers – (Optional) Eine JSON-codierte Zuordnung von Anforderungsheadern und Werten für die Amazon-S3-
putObject-Anforderung, die für den Überlauf verwendet wird (z. B.{"x-amz-server-side-encryption" : "AES256"}). Andere mögliche Header finden Sie unter PutObject in der API-Referenz zu Amazon Simple Storage Service. -
kms_key_id – (Optional) Standardmäßig werden alle Daten, die an Amazon S3 gesendet werden, mit dem AES-GCM-authentifizierten Verschlüsselungsmodus und einem zufällig generierten Schlüssel verschlüsselt. Damit Ihre Lambda-Funktion stärkere Verschlüsselungsschlüssel verwendet, die von KMS generiert werden, wie
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, können Sie eine ID einer Verschlüsselung angeben. -
disable_spill_encryption – (Optional) Bei Einstellung auf
True, wird die Spill-Verschlüsselung deaktiviert. Die Standardeinstellung istFalse, sodass Daten, die an S3 übertrragen werden, mit AES-GCM verschlüsselt werden - entweder mit einem zufällig generierten Schlüssel oder mit KMS zum Generieren von Schlüsseln. Das Deaktivieren der Überlauf-Verschlüsselung kann die Leistung verbessern, insbesondere wenn Ihr Überlauf-Standort eine serverseitige Verschlüsselung verwendet. -
disable_glue – (Optional) Falls vorhanden und auf „true“ (wahr) gesetzt, versucht der Konnektor nicht, zusätzliche Metadaten aus AWS Glue abzurufen.
-
glue_catalog – (Optional) Verwenden Sie diese Option, um einen kontoübergreifenden AWS Glue-Katalog anzugeben. Standardmäßig versucht der Konnektor, Metadaten von seinem eigenen AWS Glue-Konto abzurufen.
-
default_base – Gibt, falls vorhanden, eine HBase-Verbindungszeichenfolge an, die verwendet werden soll, wenn keine katalogspezifische Umgebungsvariable vorhanden ist.
-
enable_case_insensitive_match – (Optional) Wenn
true, führt Suchen in Tabellennamen in HBase ohne Berücksichtigung der Groß- und Kleinschreibung durch. Der Standardwert istfalse. Verwenden Sie dies, wenn Ihre Abfrage Tabellennamen in Großbuchstaben enthält.
Angeben von Verbindungszeichenfolgen
Sie können eine oder mehrere Eigenschaften angeben, die die HBase-Verbindungsdetails für die HBase-Instances definieren, die Sie mit dem Konnektor verwenden. Legen Sie dazu eine Lambda-Umgebungsvariable fest, die dem Katalognamen entspricht, den Sie in Athena verwenden möchten. Angenommen, Sie möchten die folgenden Abfragen verwenden, um zwei verschiedene HBase-Instances von Athena abzufragen:
SELECT * FROM "hbase_instance_1".database.table
SELECT * FROM "hbase_instance_2".database.table
Bevor Sie diese beiden SQL-Anweisungen verwenden können, müssen Sie Ihrer Lambda-Funktion zwei Umgebungsvariablen hinzufügen: hbase_instance_1 und hbase_instance_2. Der Wert für jede Verbindung sollte eine HBase-Verbindungszeichenfolge mit folgendem Format sein:
master_hostname:hbase_port:zookeeper_port
Verwendung von Secrets
Sie können optional AWS Secrets Manager für einen Teil oder den gesamten Wert für die Details Ihrer Verbindungszeichenfolge verwenden. Um das Athena-Federated-Query-Feature mit Secrets Manager zu verwenden, sollte die mit Ihrer Lamba-Funktion verbundene VPC über einen Internetzugang
Wenn Sie die Syntax ${my_secret} verwenden, um den Namen eines Secrets aus Secrets Manager in Ihre Verbindungszeichenfolge einzufügen, ersetzt der Konnektor den geheimen Namen durch Ihren Benutzernamen und die Kennwortwerte aus Secrets Manager.
Angenommen, Sie setzen die Lambda-Umgebungsvariable für hbase_instance_1 auf den folgenden Wert:
${hbase_host_1}:${hbase_master_port_1}:${hbase_zookeeper_port_1}
Das Athena Query Federation SDK versucht automatisch, ein Secret mit dem Namen hbase_instance_1_creds vom Secrets Manager abzurufen und setzt diesen Wert anstelle von ${hbase_instance_1_creds}. Ein beliebiger Teil der Verbindungszeichenfolge, der in der ${
}-Zeichenkombination enthalten ist, wird als Secret aus Secrets Manager interpretiert. Wenn Sie einen geheimen Namen angeben, den der Konnektor in Secrets Manager nicht finden kann, ersetzt der Konnektor den Text nicht.
Einrichten von Datenbanken und Tabellen in AWS Glue
Die integrierte Schemainferenz des Konnektors unterstützt nur Werte, die in HBase als Strings serialisiert sind (z. B. String.valueOf(int)). Da die integrierten Schemainferenzfunktionen des Konnektors begrenzt sind, sollten Sie stattdessen AWS Glue für Metadaten verwenden. Für die Aktivierung einer AWS Glue-Tabelle für die Verwendung mit HBase benötigen Sie eine AWS Glue-Datenbank und -Tabelle mit Namen, die mit dem HBase-Namensbereich und der -Tabelle übereinstimmen, für die Sie zusätzliche Metadaten bereitstellen möchten. Die Verwendung der Namenskonventionen für HBase-Spaltenfamilien ist optional, aber nicht erforderlich.
Verwenden Sie eine AWS Glue-Tabelle für ergänzende Metadaten wie folgt
-
Wenn Sie die Tabelle und die Datenbank in der AWS Glue-Konsole bearbeiten, fügen Sie die folgenden Tabelleneigenschaften hinzu:
hbase-metadata-flag – Diese Eigenschaft gibt dem HBase-Konnektor an, dass der Konnektor die Tabelle für ergänzende Metadaten verwenden kann. Sie können einen beliebigen Wert für
hbase-metadata-flagangeben, solange diehbase-metadata-flag-Eigenschaft in der Liste der Tabelleneigenschaften vorhanden ist.-
hbase-native-storage-flag – Verwenden Sie dieses Flag, um die beiden vom Konnektor unterstützten Wertserialisierungsmodi umzuschalten. Wenn dieses Feld nicht vorhanden ist, geht der Konnektor standardmäßig davon aus, dass alle Werte in HBase als Zeichenfolge gespeichert sind. Daher wird er versuchen, Datentypen wie
INT,BIGINTundDOUBLEvon HBase als Zeichenfolgen zu analysieren. Wenn dieses Feld mit einem beliebigen Wert in der Tabelle in AWS Glue festgelegt ist, wechselt der Konnektor in den „nativen“ Speichermodus und versuchtINT,BIGINT,BITundDOUBLEals Byte mithilfe der folgenden Funktionen zu lesen:ByteBuffer.wrap(value).getInt() ByteBuffer.wrap(value).getLong() ByteBuffer.wrap(value).get() ByteBuffer.wrap(value).getDouble()
-
Achten Sie darauf, Datentypen zu verwenden, die für AWS Glue geeignet sind, wie in diesem Dokument aufgeführt.
Modellieren von Spaltenfamilien
Der Athena-HBase-Konnektor unterstützt zwei Möglichkeiten zur Modellierung von HBase-Spaltenfamilien: vollqualifizierte (abgeflachte) Benennung wie family:column oder die Verwendung von STRUCT-Objekten.
Im STRUCT-Model sollte der Name des STRUCT-Feldes mit der Spaltenfamilie übereinstimmen und die untergeordneten Elementen von STRUCT sollten mit den Namen der Spalten der Familie übereinstimmen. Da Prädikat-Push-Down- und Columnar-Lesevorgänge jedoch für komplexe Typen wie STRUCT noch nicht vollständig unterstützt werden, wird die Verwendung von STRUCT derzeit nicht empfohlen.
Das folgende Image zeigt eine in AWS Glue konfigurierte Tabelle, die eine Kombination der beiden Ansätze verwendet.
Datentypunterstützung
Der Konnektor ruft alle HBase-Werte als Basis-Byte-Typ ab. Dann, basierend darauf, wie Sie Ihre Tabellen im AWS Glue-Datenkatalog definiert haben, ordnet er die Werte einem der Apache Arrow-Datentypen in der folgenden Tabelle zu.
| AWS Glue -Datentyp | Apache Arrow-Datentyp |
|---|---|
| int | INT |
| bigint | BIGINT |
| double | FLOAT8 |
| float | FLOAT4 |
| boolesch | BIT |
| Binary | VARBINARY |
| Zeichenfolge | VARCHAR |
Anmerkung
Wenn Sie AWS Glue nicht verwenden, um Ihre Metadaten zu ergänzen, verwendet die Schema-Inferenzierung des Konnektors nur die Datentypen BIGINT, FLOAT8 und VARCHAR.
Erforderliche Berechtigungen
Ausführliche Informationen zu den für diesen Konnektor erforderlichen IAM-Richtlinien finden Sie im Policies-Abschnitt der athena-hbase.yaml
-
Amazon-S3-Schreibzugriff – Der Konnektor benötigt Schreibzugriff auf einen Speicherort in Amazon S3, um Ergebnisse aus großen Abfragen zu übertragen.
-
Athena GetQueryExecution – Der Konnektor verwendet diese Berechtigung, um ein Fast-Fail durchzuführen, wenn die vorgeschaltete Athena-Abfrage beendet wurde.
-
AWS Glue Data Catalog – Der HBase-Konnektor benötigt schreibgeschützten Zugriff auf AWS Glue Data Catalog, um Schemainformationen zu erhalten.
-
CloudWatch Logs – Der Konnektor benötigt Zugriff auf CloudWatch Logs zum Speichern von Protokollen.
-
AWS Secrets Manager-Lesezugriff – Wenn Sie HBase-Endpunktdetails in Secrets Manager speichern möchten, müssen Sie dem Konnektor Zugriff auf diese Secrets gewähren.
-
Zugriff auf VPC – Der Konnektor erfordert die Fähigkeit, Schnittstellen an Ihre VPC anzuhängen und zu trennen, damit diese eine Verbindung zu dieser herstellen und mit Ihren HBase-Instances kommunizieren kann.
Leistung
Der Athena-HBase-Konnektor versucht, Abfragen für Ihre HBase-Instance zu parallelisieren, indem er jeden Regionsserver parallel liest. Der Athena-HBase-Konnektor führt einen Prädikat-Pushdown durch, um die von der Abfrage durchsuchten Daten zu reduzieren.
Die Lambda-Funktion führt auch Projektions-Pushdown durch, um die von der Abfrage gescannten Daten zu reduzieren. Die Auswahl einer Teilmenge von Spalten führt jedoch manchmal zu einer längeren Laufzeit der Abfrageausführung. LIMIT-Klauseln reduzieren die Menge der gescannten Daten, aber wenn Sie kein Prädikat angeben, sollten Sie davon ausgehen, dass SELECT-Abfragen mit einer LIMIT-Klausel mindestens 16 MB an Daten scannen.
HBase ist anfällig für Abfragefehler und schwankende Abfrageausführungszeiten. Möglicherweise müssen Sie Ihre Abfragen mehrmals wiederholen, damit diese erfolgreich sind. Der HBase-Konnektor ist aufgrund der Gleichzeitigkeit widerstandsfähig gegenüber Drosselung.
Pass-Through-Abfragen
Der HBase-Connector unterstützt Pass-Through-Abfragen und basiert auf NoSQL. Informationen zur Abfrage von Apache HBase mithilfe von Filtern finden Sie in der Apache-Dokumentation unter Filtersprache
Verwenden Sie die folgende Syntax, um Pass-Through-Abfragen mit HBase zu verwenden:
SELECT * FROM TABLE( system.query( database => 'database_name', collection => 'collection_name', filter => '{query_syntax}' ))
Das folgende Beispiel für eine HBase-Passthrough-Abfrage filtert innerhalb der employee-Sammlung der default-Datenbank nach Mitarbeitern im Alter von 24 oder 30 Jahren.
SELECT * FROM TABLE( system.query( DATABASE => 'default', COLLECTION => 'employee', FILTER => 'SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:30'')' || ' OR SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:24'')' ))
Lizenzinformationen
Das Amazon-Athena-HBase-Konnektor-Projekt ist lizenziert unter Apache-2.0-Lizenz
Weitere Ressourcen
Weitere Informationen zu diesem Konnektor finden Sie unter der entsprechenden Seite