Connecteur Amazon Athena pour HBase
Le connecteur Amazon Athena HBase permet à Amazon Athena de communiquer avec vos instances Apache HBase afin que vous puissiez interroger vos données HBase avec SQL.
Contrairement aux magasins de données relatives traditionnels, les collections HBase n’ont pas de schéma défini. HBase n’a pas de magasin de métadonnées. Chaque entrée d’une collection HBase peut comporter des champs et des types de données différents.
Le connecteur HBase prend en charge deux mécanismes pour générer des informations de schéma de table : l’inférence de schéma de base et métadonnées AWS Glue Data Catalog.
L’inférence de schéma est la valeur par défaut. Cette option analyse un petit nombre de documents de votre collection, réunit tous les champs et impose des champs dont les types de données ne se chevauchent pas. Cette option fonctionne bien pour les collections dont les entrées sont généralement uniformes.
Pour les collections comportant une plus grande variété de types de données, le connecteur prend en charge la récupération de métadonnées à partir du AWS Glue Data Catalog. Si le connecteur détecte une base de données AWS Glue et une table qui correspondent aux noms de votre espace de noms et de votre collection HBase, il obtient ses informations de schéma à partir de la table AWS Glue correspondante. Lorsque vous créez votre table AWS Glue, nous vous recommandons d’en faire un sur-ensemble de tous les champs auxquels vous souhaitez accéder depuis votre collection HBase.
Si Lake Formation est activé sur votre compte, le rôle IAM de votre connecteur Lambda fédéré Athena que vous avez déployé dans le AWS Serverless Application Repository doit avoir un accès en lecture au AWS Glue Data Catalog dans Lake Formation.
Ce connecteur peut être enregistré auprès du Catalogue de données Glue en tant que catalogue fédéré. Il prend en charge les contrôles d’accès aux données définis dans Lake Formation aux niveaux catalogue, base de données, table, colonne, ligne et balise. Ce connecteur utilise les connexions Glue pour centraliser les propriétés de configuration dans Glue.
Prérequis
Déployez le connecteur sur votre Compte AWS à l’aide de la console Athena ou du AWS Serverless Application Repository. Pour plus d’informations, consultez Création d’une connexion à une source de données ou Utilisation d’AWS Serverless Application Repository pour déployer un connecteur de source de données.
Paramètres
Utilisez les paramètres de cette section pour configurer le connecteur HBase.
Note
Les connecteurs de source de données Athena créés le 3 décembre 2024 et les versions ultérieures utilisent des connexions AWS Glue.
Les noms et définitions de paramètres répertoriés ci-dessous concernent les connecteurs de source de données Athena créés avant le 3 décembre 2024. Ces noms et définitions peuvent différer de ceux des propriétés de connexion AWS Glue correspondantes. À compter du 3 décembre 2024, utilisez les paramètres ci-dessous uniquement lorsque vous déployez manuellement une version antérieure d’un connecteur de source de données Athena.
Nous vous recommandons de configurer un connecteur HBase en utilisant un objet des connexions Glue. Pour ce faire, définissez la variable d’environnement glue_connection du connecteur HBase Lambda sur le nom de la connexion Glue à utiliser.
Propriétés des connexions Glue
Utilisez la commande suivante afin d’obtenir le schéma d’un objet de connexion Glue. Ce schéma contient tous les paramètres que vous pouvez utiliser pour contrôler votre connexion.
aws glue describe-connection-type --connection-type HBASE
Propriétés d’environnement Lambda
-
glue_connection – Spécifie le nom de la connexion Glue associée au connecteur fédéré.
Note
-
Tous les connecteurs qui utilisent des connexions Glue doivent utiliser AWS Secrets Manager pour stocker les informations d’identification.
-
Le connecteur HBase créé à l’aide des connexions Glue ne prend pas en charge l’utilisation d’un gestionnaire de multiplexage.
-
Le connecteur HBase créé à l’aide des connexions Glue prend uniquement en charge
ConnectionSchemaVersion2.
-
spill_bucket – Spécifie le compartiment Amazon S3 pour les données qui dépassent les limites des fonctions Lambda.
-
spill_prefix – (Facultatif) Par défaut, il s’agit d’un sous-dossier dans le
spill_bucketspécifié appeléathena-federation-spill. Nous vous recommandons de configurer un cycle de vie de stockage Amazon S3 à cet endroit pour supprimer les déversements supérieurs à un nombre de jours ou d’heures prédéterminé. -
spill_put_request_headers – (Facultatif) Une carte codée au format JSON des en-têtes et des valeurs des demandes pour la demande
putObjectAmazon S3 utilisée pour le déversement (par exemple,{"x-amz-server-side-encryption" : "AES256"}). Pour les autres en-têtes possibles, consultez PutObject dans la Référence d'API Amazon Simple Storage Service. -
kms_key_id – (Facultatif) Par défaut, toutes les données déversées vers Amazon S3 sont chiffrées à l'aide du mode de chiffrement authentifié AES-GCM et d'une clé générée de manière aléatoire. Pour que votre fonction Lambda utilise des clés de chiffrement plus puissantes générées par KMS, comme
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, vous pouvez spécifier l’ID d’une clé KMS. -
disable_spill_encryption – (Facultatif) Lorsque la valeur est définie sur
True, le chiffrement des déversements est désactivé. La valeur par défaut estFalseafin que les données déversées vers S3 soient chiffrées à l’aide d’AES-GCM, soit à l’aide d’une clé générée de manière aléatoire soit à l’aide de KMS pour générer des clés. La désactivation du chiffrement des déversements peut améliorer les performances, surtout si votre lieu de déversement utilise le chiffrement côté serveur. -
disable_glue – (Facultatif) S’il est présent et défini sur true, le connecteur ne tente pas de récupérer des métadonnées supplémentaires depuis AWS Glue.
-
glue_catalog – (Facultatif) Utilisez cette option pour spécifier un catalogue AWS Glue entre compte. Par défaut, le connecteur tente d’obtenir des métadonnées depuis son propre compte AWS Glue.
-
default_hbase – S’il est présent, il spécifie une chaîne de connexion HBase à utiliser lorsqu’aucune variable d’environnement spécifique au catalogue n’existe.
-
enable_case_insensitive_match – (Facultatif) Lorsqu’elle est définie sur
true, cette option réalise des recherches non sensibles à la casse sur les noms de table dans HBase. La valeur par défaut estfalse. À utiliser si votre requête contient des noms de table en majuscules.
Définition des chaînes de connexion
Vous pouvez fournir une ou plusieurs propriétés qui définissent les détails de connexion HBase pour les instances HBase que vous utilisez avec le connecteur. Pour ce faire, définissez une variable d’environnement Lambda qui correspond au nom du catalogue que vous souhaitez utiliser dans Athena. Supposons, par exemple, que vous souhaitiez utiliser les requêtes suivantes pour interroger deux instances HBase différentes depuis Athena :
SELECT * FROM "hbase_instance_1".database.table
SELECT * FROM "hbase_instance_2".database.table
Avant de pouvoir utiliser ces deux instructions SQL, vous devez ajouter deux variables d’environnement à votre fonction Lambda : hbase_instance_1 et hbase_instance_2. La valeur pour chacune d’elles doit être une chaîne de connexion HBase au format suivant :
master_hostname:hbase_port:zookeeper_port
Utilisation de secrets
Vous pouvez éventuellement utiliser AWS Secrets Manager pour une partie ou la totalité de la valeur des détails de votre chaîne de connexion. Pour utiliser la fonctionnalité de requête fédérée d’Athena avec Secrets Manager, le VPC connecté à votre fonction Lambda doit avoir un accès internet
Si vous utilisez la syntaxe ${my_secret} pour mettre le nom d’un secret provenant de Secrets Manager dans votre chaîne de connexion, le connecteur remplace le nom secret par vos valeurs de nom d’utilisateur et de mot de passe provenant de Secrets Manager.
Supposons, par exemple, que vous définissiez la variable d’environnement Lambda pour hbase_instance_1 sur la valeur suivante :
${hbase_host_1}:${hbase_master_port_1}:${hbase_zookeeper_port_1}
Le SDK Athena Query Federation tente automatiquement de récupérer un secret nommé hbase_instance_1_creds à partir de Secrets Manager et d’injecte cette valeur à la place de ${hbase_instance_1_creds}. Toute partie de la chaîne de connexion qui est entourée par la combinaison de caractères ${
} est interprétée comme un secret de Secrets Manager. Si vous spécifiez un nom de secret que le connecteur ne trouve pas dans Secrets Manager, le connecteur ne remplace pas le texte.
Configuration de bases de données et de tables dans AWS Glue
L’inférence de schéma intégrée du connecteur prend en charge uniquement les valeurs sérialisées dans HBase sous forme de chaînes (par exemple, String.valueOf(int)). La capacité d’inférence de schéma intégrée du connecteur étant limitée, vous pouvez souhaiter utiliser plutôt AWS Glue pour les métadonnées. Pour activer une table AWS Glue à utiliser avec HBase, vous devez posséder une base de données AWS Glue et une table dont les noms correspondent à l’espace de noms et à la table HBase pour lesquels vous souhaitez fournir des métadonnées supplémentaires. L’utilisation des conventions de dénomination des familles de colonnes HBase est facultative, mais pas obligatoire.
Pour utiliser une table AWS Glue pour des métadonnées supplémentaires
-
Lorsque vous modifiez la table et la base de données dans la console AWS Glue, ajoutez les propriétés de table suivantes :
hbase-metadata-flag – Cette propriété indique au connecteur HBase que le connecteur peut utiliser la table pour des métadonnées supplémentaires. Vous pouvez fournir n’importe quelle valeur pour
hbase-metadata-flagtant que la propriétéhbase-metadata-flagest présente dans la liste des propriétés de la table.-
hbase-native-storage-flag – Utilisez cet indicateur pour basculer entre les deux modes de sérialisation des valeurs pris en charge par le connecteur. Par défaut, lorsque ce champ n’est pas présent, le connecteur suppose que toutes les valeurs sont stockées dans HBase sous forme de chaînes. En tant que tel, il tentera d’analyser les types de données tels que
INT,BIGINTetDOUBLEà partir de HBase sous forme de chaînes. Si ce champ est défini avec une valeur quelconque sur la table dans AWS Glue, le connecteur passe en mode de stockage « natif » et tente de lireINT,BIGINT,BITetDOUBLEsous forme d’octets à l’aide des fonctions suivantes :ByteBuffer.wrap(value).getInt() ByteBuffer.wrap(value).getLong() ByteBuffer.wrap(value).get() ByteBuffer.wrap(value).getDouble()
-
Veillez à utiliser les types de données appropriés pour AWS Glue, comme indiqué dans ce document.
Modélisation de familles de colonnes
Le connecteur Athena HBase permet de modéliser les familles de colonnes HBase de deux manières : des noms entièrement qualifiés (aplatis) tels que family:column, ou à l’aide d’objets STRUCT.
Dans le modèle STRUCT, le nom du champ STRUCT doit correspondre à la famille de colonnes, tandis que les enfants de STRUCT doivent correspondre aux noms des colonnes de la famille. Cependant, étant donné que les lectures de prédicats poussés vers le bas et en colonnes ne sont pas encore totalement prises en charge pour les types complexes tels que STRUCT, l’utilisation de STRUCT n’est actuellement pas conseillée.
L’image suivante illustre un tableau configuré dans AWS Glue qui utilise une combinaison des deux approches.
Prise en charge du type de données
Le connecteur extrait toutes les valeurs HBase en tant que type d’octet de base. Ensuite, en fonction de la façon dont vous avez défini vos tables dans le catalogue de données AWS Glue, il mappe les valeurs dans l’un des types de données Apache Arrow dans la table suivante.
| AWS GlueType de données | Type de données Apache Arrow |
|---|---|
| int | INT |
| bigint | BIGINT |
| double | FLOAT8 |
| float | FLOAT4 |
| boolean | BIT |
| binary | VARBINARY |
| chaîne | VARCHAR |
Note
Si vous n’utilisez pas AWS Glue pour compléter vos métadonnées, l’inférence du schéma du connecteur utilise uniquement les types de données BIGINT, FLOAT8 et VARCHAR.
Autorisations nécessaires
Pour plus de détails sur les politiques IAM requises par ce connecteur, reportez-vous à la section Policies du fichier athena-hbase.yaml
-
Amazon S3 write access (Accès en écriture Amazon S3) – Le connecteur nécessite un accès en écriture à un emplacement dans Amazon S3 pour déverser les résultats à partir de requêtes volumineuses.
-
Athena GetQueryExecution – Le connecteur utilise cette autorisation pour aboutir à un échec rapide lorsque la requête Athena en amont est terminée.
-
AWS Glue Data Catalog – Le connecteur HBase nécessite un accès en lecture seule au AWS Glue Data Catalog pour obtenir des informations sur le schéma.
-
CloudWatch Logs – Le connecteur nécessite un accès à CloudWatch Logs pour stocker les journaux.
-
Accès en lecture à AWS Secrets Manager— Si vous choisissez de stocker les détails du point de terminaison HBase dans Secrets Manager, vous devez autoriser le connecteur à accéder à ces secrets.
-
Accès VPC – Le connecteur nécessite la possibilité d’attacher des interfaces à votre VPC et de les détacher afin qu’il puisse s’y connecter et communiquer avec vos instances HBase.
Performances
Le connecteur Athena HBase tente de paralléliser les requêtes sur votre instance HBase en lisant chaque serveur de région en parallèle. Le connecteur Athena HBase effectue une poussée vers le bas des prédicats pour réduire les données analysées par la requête.
La fonction Lambda effectue également une poussée vers le bas de projection pour réduire les données analysées par la requête. Cependant, la sélection d’un sous-ensemble de colonnes entraîne parfois un temps d’exécution plus long de la requête. Les clauses LIMIT réduisent la quantité de données analysées, mais si vous ne fournissez pas de prédicat, vous devez vous attendre à ce que les requêtes SELECT avec une clause LIMIT analysent au moins 16 Mo de données.
HBase est susceptible de faire échouer des requêtes et d'avoir des temps d'exécution variables. Vous devrez peut-être réessayer vos requêtes plusieurs fois pour qu'elles aboutissent. Le connecteur HBase résiste à la limitation due à la simultanéité.
Requêtes de transmission
Basé sur NoSQL, le connecteur HBase prend en charge les requêtes de transmission. Pour plus d’informations sur les interrogations avec Apache HBase à l’aide du filtrage, consultez Filter language
Pour utiliser les requêtes de transmission avec HBase, utilisez la syntaxe suivante :
SELECT * FROM TABLE( system.query( database => 'database_name', collection => 'collection_name', filter => '{query_syntax}' ))
L’exemple de requête de transmission HBase ci-dessous filtre les employés âgés de 24 ou 30 ans au sein de la employee collection de la base de données default.
SELECT * FROM TABLE( system.query( DATABASE => 'default', COLLECTION => 'employee', FILTER => 'SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:30'')' || ' OR SingleColumnValueFilter(''personaldata'', ''age'', =, ''binary:24'')' ))
Informations de licence
Le projet de connecteur HBase Amazon Athena est concédé sous licence dans le cadre de la licence Apache-2.0
Ressources supplémentaires
Pour plus d'informations sur ce connecteur, consultez le site correspondant