Amazon Athena HBase Konnektor - Amazon Athena

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

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 ConnectionSchemaVersion 2.

  • 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_bucket genannt athena-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, wiea7e63k4b-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 ist False, 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 ist false. 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 oder einen VPC-Endpunkt verfügen, um eine Verbindung zu Secrets Manager herzustellen.

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
  1. 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-flag angeben, solange die hbase-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, BIGINT und DOUBLE von 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 versucht INT, BIGINT, BIT und DOUBLE als Byte mithilfe der folgenden Funktionen zu lesen:

      ByteBuffer.wrap(value).getInt() ByteBuffer.wrap(value).getLong() ByteBuffer.wrap(value).get() ByteBuffer.wrap(value).getDouble()
  2. 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.

Modellieren von Spaltenfamilien in AWS Glue für Apache Hbase.

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-Datei. In der folgenden Liste sind die erforderlichen Berechtigungen zusammengefasst.

  • 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 auf GitHub.com.