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

Antes de crear un metastore en Data Catalog, debe crear dos cubos en Oracle Object Storage para que contengan la tabla gestionada y la externa.
  • 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>.

Nota

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.

Como requisito, cree un grupo dinámico que incluya el metastore. En las siguientes sentencias de política, su OCID está representado por <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>'}
Nota

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

El metastore de Data Catalog proporciona un control de acceso detallado mediante el servicio Identity and Access Management para evitar el acceso accidental y la modificación de los recursos creados por otro usuario. Como administrador, puede otorgar acceso a recursos como catálogos, bases de datos y tablas mediante políticas predefinidas mencionadas en la lista de recursos de la página de detalles de metastore. Para obtener más información sobre la visualización de recursos de metastore, consulte Viewing Metastore Resources List.
Nota

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:

Nota

  • 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>'}