Metastore do Serviço Data Catalog
O Apache Hive é uma estrutura de data warehousing que facilita as operações de leitura, gravação ou gerenciamento em grandes conjuntos de dados que residem em sistemas distribuídos.
O Metastore do serviço Data Catalog fornece um repositório central altamente disponível e escalável de metadados para um cluster do Hive. Ele armazena metadados para estruturas de dados, como bancos de dados, tabelas e partições em um banco de dados relacional, com o apoio de arquivos mantidos no Object Storage. O Apache Spark SQL usa o Metastore do serviço Data Catalog para essa finalidade.
As instâncias do serviço OCI Data Flow, OCI Big Data Service e OCI Data Science acessam o Metastore do Data Catalog para armazenar e recuperar com segurança definições de esquema para os objetos em ativos de dados não estruturados e semiestruturados, como o Object Storage.
Pré-requisitos
- Tabela Gerenciada: O Metastore gerencia o objeto de tabela.
- Tabela Externa: Como usuário, você gerencia o objeto da tabela.
Ao criar o metastore no serviço Data Catalog, você fornece os URIs dos buckets nos quais as tabelas gerenciadas e externas residem. O formato do URI deve ser oci://<bucket_name>@<namespace_name>/<folder name of your choice>
.
Recomendamos que você não use o mesmo local para tabelas gerenciadas e externas. Se os dois tipos de tabelas estiverem no mesmo diretório, a exclusão de dados das tabelas gerenciadas também poderá resultar na perda de dados das tabelas externas.
Para obter mais informações, consulte conector HDFS.
Políticas Obrigatórias do Serviço IAM
Você deve adicionar políticas para permitir o acesso do Controlador de Recursos do Metastore aos locais de armazenamento.
<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 o Metastore crie buckets dinamicamente por banco de dados usando a definição de parâmetro
spark.conf
oci.dcat.metastore.create.bucket.per.db = true, adicione as seguintes 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>'}}
Somente um Admin
e os usuários do grupo Administrators
têm acesso a todos os recursos de metastore do serviço Data Catalog. Como um Admin
, você pode usar as políticas a seguir para fornecer acesso a todos os recursos do 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>
Essas políticas são obrigatórias, a menos que políticas detalhadas sejam definidas para recursos de catálogo, banco de dados ou nível de tabela. Para obter mais informações, consulte Políticas Obrigatórias do Serviço IAM para Controle de Acesso Grosso.
Controle de Acesso Grosso no Metastore do Serviço Data Catalog
Por padrão, o controle de acesso detalhado é desativado; portanto, você deve definir as políticas necessárias para acessar todos os recursos do metastore. Consulte Políticas Obrigatórias do Serviço IAM. Após definir essas políticas, defina o parâmetro
Spark.Conf
como true
. Para soluções baseadas em Hive ou HiveServer2, defina oci.dcat.metastore.enable.cgac = true
. Para soluções baseadas em Spark ou Spark, defina spark.hadoop.oci.dcat.metastore.enable.cgac = true
.Políticas Obrigatórias do IAM para Controle de Acesso Grosso
Use as seguintes políticas para fornecer acesso a recursos de catálogo, banco de dados ou nível de tabela:
- A aplicação de políticas no nível do banco de dados ou da tabela requer permissão para gerenciar
<hive-default>
. - Quando as políticas são aplicadas no nível do banco de dados ou da tabela, os usuários do grupo não podem ver ou listar os bancos de dados e as tabelas criados por outro usuário.
Permitir acesso a recursos de nível de catálogo:
- Usando
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>'}
- Usando
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>'}
Observação
O nome, a chave e a declaração de política de amostra estão disponíveis na página do metastore na seção Recursos.Ao criar uma política para um novo catálogo, você também deve criar uma política para o banco de dados padrão criado como parte desse 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>}
Permita que um <specific-group>
acesse recursos no nível do banco de dados ou da tabela para um catálogo específico, em que o usuário tenha acesso aos recursos filhos desse catálogo:
- Usando
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 = '*'}
- Usando
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 um <specific-group>
acesse recursos no nível do banco de dados para um catálogo específico aplicando uma das seguintes políticas:
- Usando
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>'}
- Usando
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 um <specific-group>
acesse recursos no nível da tabela para um banco de dados específico aplicando uma das seguintes políticas:
- Usando
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>'}
- Usando
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 Adicionais
Aqui estão alguns recursos que você pode usar para saber mais sobre os metastores:
Publicação do Blog
Aprimorando a colaboração do usuário com o OCI Data Flow e o Metastore do Data Catalog