Metastore de Data Catalog
Apache Hive es un marco de almacenamiento de datos que facilita las operaciones de lectura, escritura o gestión en grandes conjuntos de datos que residen en sistemas distribuidos.
El metastore de Data Catalog proporciona un repositorio central de metadatos escalable y de alta disponibilidad para un cluster de Hive. Almacena metadatos para estructuras de datos, como bases de datos, tablas y particiones, en una base de datos relacional, respaldados por archivos mantenidos en Object Storage. Apache Spark SQL utiliza el metastore de Data Catalog para este fin.
Las instancias de servicio de OCI Data Flow, OCI Big Data Service y OCI Data Science acceden a Metastore de Data Catalog para almacenar y recuperar de forma segura definiciones de esquema para los objetos en activos de datos no estructurados y semiestructurados, como Object Storage.
Requisitos previos
- Tabla gestionada: el metastore gestiona el objeto de tabla.
- Tabla externa: como usuario, puede gestionar el objeto de tabla.
Al crear el metastore en Data Catalog, debe proporcionar los URI de los cubos en los que residen la tabla gestionada y la externa. El formato del URI debe ser oci://<bucket_name>@<namespace_name>/<folder name of your choice>
.
Se recomienda no utilizar la misma ubicación para la tabla gestionada y la externa. Si ambos tipos de tablas están en el mismo directorio, la supresión de datos de tablas gestionadas también podría provocar la pérdida de datos de tablas externas.
Para obtener más información, consulte la sección sobre el conector HDFS.
Políticas de IAM necesarias
Debe agregar políticas para permitir el acceso de la entidad de recurso de Metastore a las ubicaciones de almacenamiento.
<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>'}
Para permitir que Metastore cree cubos de forma dinámica por base de datos mediante el valor del parámetro
spark.conf
oci.dcat.metastore.create.bucket.per.db = true, agregue las siguientes políticas: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>'}}
Solo Admin
y los usuarios del grupo Administrators
tienen acceso a todos los recursos de metastore de Data Catalog. Como Admin
, puede utilizar las siguientes políticas para proporcionar acceso a todos los recursos 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>
Estas políticas son obligatorias, a menos que se definan políticas detalladas para recursos de nivel de catálogo, base de datos o tabla. Para obtener más información, consulte Políticas de IAM necesarias para un control de acceso detallado.
Control de acceso detallado en el metastore de Data Catalog
Por defecto, el control de acceso detallado está desactivado, por lo que debe definir las políticas necesarias para acceder a todos los recursos de metastore. Consulte Políticas de IAM necesarias. Después de definir estas políticas, defina el parámetro
Spark.Conf
en true
. Para las soluciones basadas en Hive o HiveServer2, defina oci.dcat.metastore.enable.cgac = true
. Para las soluciones basadas en Spark o Spark, defina spark.hadoop.oci.dcat.metastore.enable.cgac = true
.Políticas de IAM necesarias para un control de acceso detallado
Utilice las siguientes políticas para proporcionar acceso a recursos de nivel de catálogo, base de datos o tabla:
- La aplicación de políticas a nivel de base de datos o tabla necesita permiso para gestionar
<hive-default>
. - Cuando las políticas se aplican a nivel de base de datos o tabla, los usuarios del grupo no pueden ver ni mostrar las bases de datos y tablas creadas por otro usuario.
Permitir acceso a recursos de nivel de catálogo:
- Uso 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>'}
- Uso 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>'}
Nota
El nombre, la clave y la sentencia de política de ejemplo están disponibles en la página Metastore en la sección Recursos.Al crear una política para un nuevo catálogo, también debe crear una política para la base de datos por defecto creada como parte de ese catálogo.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>}
Permitir a <specific-group>
acceder a recursos de base de datos o de nivel de tabla para un catálogo específico, donde el usuario tiene acceso a los recursos secundarios de ese catálogo:
- Uso 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 = '*'}
- Uso 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 = '*'}
Permita que <specific-group>
acceda a los recursos de nivel de base de datos para un catálogo específico mediante la aplicación de una de las siguientes políticas:
- Uso 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>'}
- Uso 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>'}
Permita que <specific-group>
acceda a recursos de nivel de tabla para una base de datos específica mediante la aplicación de una de las siguientes políticas:
- Uso 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>'}
- Uso 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>'}
Recursos adicionales
A continuación se muestran algunos recursos que puede utilizar para obtener más información sobre los metastores:
Publicación de Blog
Mejora de la colaboración del usuario mediante OCI Data Flow y el metastore de Data Catalog