Metastore Data Catalog
Apache Hive est une structure d'entreposage de données qui facilite la lecture, l'écriture ou la gestion des opérations sur des ensembles de données volumineux résidant dans des systèmes distribués.
Le metastore Data Catalog fournit un référentiel central de métadonnées hautement disponible et évolutif pour un cluster Hive. Il stocke les métadonnées pour les structures de données telles que les bases de données, les tables et les partitions dans une base de données relationnelle, s'appuyant sur des fichiers gérés dans Object Storage. Apache Spark SQL utilise le metastore Data Catalog à cette fin.
Les instances OCI Data Flow, OCI Big Data Service et OCI Data Science ont accès au metastore Data Catalog pour stocker et extraire en toute sécurité les définitions de schéma des objets dans des ressources de données non structurées et semi-structurées, telles qu'Object Storage.
Prérequis
- Table gérée : le metastore gère l'objet de table.
- Table externe : en tant qu'utilisateur, vous gérez l'objet de table.
Lors de la création du metastore dans Data Catalog, vous indiquez les URI des buckets dans lesquels résident les tables gérée et externe. Le format de l'URI doit être oci://<bucket_name>@<namespace_name>/<folder name of your choice>
.
Nous vous recommandons de ne pas utiliser le même emplacement pour les tables gérée et externe. Si les deux types de table se trouvent dans le même répertoire, la suppression de données de tables gérées peut entraîner la perte de données de tables externes.
Pour plus d'informations, reportez-vous à Connecteur HDFS.
Stratégies IAM requises
Vous devez ajouter des stratégies permettant au principal de ressource de metastore d'accéder aux emplacements de stockage.
<dg-metastore-ocid>
:ALLOW dynamic-group <dg-metastore-ocid> to read buckets in tenancy where any {all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}, all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}}
ALLOW dynamic-group <dg-metastore-ocid> to manage objects in tenancy where all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}
ALLOW dynamic-group <dg-metastore-ocid> to read objects in tenancy where all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}
Pour autoriser le metastore à créer dynamiquement des buckets par base de données à l'aide du paramètre
spark.conf
définissant oci.dcat.metastore.create.bucket.per.db = true, ajoutez les stratégies suivantes :ALLOW dynamic-group <dg-metastore-ocid> to manage buckets in tenancy where any {all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}}
ALLOW dynamic-group <dg-metastore-ocid> to read buckets in tenancy where any {all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}}
Seuls Admin
et les utilisateurs du groupe Administrators
ont accès à toutes les ressources de metastore Data Catalog. En tant que Admin
, vous pouvez utiliser les stratégies suivantes pour fournir l'accès à toutes les ressources de metastore.
allow <any-user> to manage data-catalog-metastore-assets in compartment <compartment-name>
allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name>
Ces stratégies sont obligatoires, sauf si des stratégies généralisées sont définies pour les ressources de catalogue, de base de données ou de table. Pour plus d'informations, reportez-vous à Stratégies IAM requises pour le contrôle d'accès de niveau grossier.
Contrôle d'accès de niveau grossier dans le metastore Data Catalog
Par défaut, le contrôle d'accès de niveau grossier est désactivé. Vous devez donc définir les stratégies requises pour accéder à toutes les ressources de metastore. Reportez-vous à Stratégies IAM requises. Après avoir défini ces stratégies, définissez le paramètre
Spark.Conf
sur true
. Pour les solutions basées sur Hive ou HiveServer2, définissez oci.dcat.metastore.enable.cgac = true
. Pour les solutions basées sur Spark ou Spark, définissez spark.hadoop.oci.dcat.metastore.enable.cgac = true
.Stratégies IAM requises pour le contrôle d'accès de niveau grossier
Utilisez les stratégies suivantes pour fournir l'accès aux ressources de niveau catalogue, base de données ou table :
- L'application de stratégies au niveau de la base de données ou de la table nécessite des droits d'accès permettant de gérer
<hive-default>
. - Lorsque des stratégies sont appliquées au niveau de la base de données ou de la table, les utilisateurs du groupe ne peuvent pas voir ni répertorier les bases de données et les tables créées par un autre utilisateur.
Autoriser l'accès aux ressources de niveau catalogue :
- Utilisation de
target.metastore.catalog.name
allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
- Utilisation de
target.metastore.catalog.key
allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.key = '<metastore-catalog-key>'}
Remarque
Le nom, la clé et l'exemple d'instruction de stratégie sont disponibles sur la page du metastore, sous la section Ressources.Lorsque vous créez une stratégie pour un nouveau catalogue, vous devez également créer une stratégie pour la base de données par défaut créée dans le cadre de ce catalogue.allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = <metastore-catalog-name.default>}
Autorisez <specific-group>
à accéder aux ressources au niveau de la base de données ou de la table pour un catalogue spécifique, où l'utilisateur a accès aux ressources enfant de ce catalogue :
- Utilisation de
target.metastore.catalog.name
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<metastore-catalog-name.default>'}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '*'}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.name = '*'}
- Utilisation de
target.metastore.catalog.key
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.key = '<catalog-ID>'}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = <metastore-catalog-name.default>}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.key = '*'}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.key = '*'}
Autorisez <specific-group>
à accéder aux ressources de niveau base de données pour un catalogue spécifique en appliquant l'une des stratégies suivantes :
- Utilisation de
target.metastore.database.name
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<catalog-name>.<database-name>'}
- Utilisation de
target.metastore.database.key
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.key = '<metastore-database-ID>'}
Autorisez <specific-group>
à accéder aux ressources de niveau table pour une base de données spécifique en appliquant l'une des stratégies suivantes :
- Utilisation de
target.metastore.table.name
allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<catalog-name>.<database-name>'}
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.name = '<catalog-name>.<database-name>.<table-name>'}
- Utilisation de
target.metastore.table.key
allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.key = '<metastore-table-ID>'}
Ressources supplémentaires
Voici quelques ressources pour en savoir plus sur les metastores :
Publication de blog