Metastore Data Catalog
Apache Hive è un framework di data warehousing che facilita le operazioni di lettura, scrittura o gestione su set di dati di grandi dimensioni che risiedono in sistemi distribuiti.
Data Catalog Metastore fornisce un repository centrale di metadati ad alta disponibilità e scalabile per un cluster Hive. Memorizza i metadati per le strutture di dati quali database, tabelle e partizioni in un database relazionale, supportato da file gestiti nello storage degli oggetti. Apache Spark SQL utilizza Data Catalog Metastore per questo scopo.
Le istanze del servizio OCI Data Flow, OCI Big Data Service e OCI Data Science accedono al metastore Data Catalog per memorizzare e recuperare in modo sicuro le definizioni degli schemi per gli oggetti negli asset dati non strutturati e semistrutturati, ad esempio lo storage degli oggetti.
Requisiti indispensabili
- Tabella gestita: il metastore gestisce l'oggetto tabella.
- Tabella esterna: l'utente gestisce l'oggetto tabella.
Durante la creazione del metastore in Data Catalog, si forniscono gli URI dei bucket in cui risiedono le tabelle gestite ed esterne. Il formato dell'URI deve essere oci://<bucket_name>@<namespace_name>/<folder name of your choice>
.
Si consiglia di non utilizzare la stessa posizione per le tabelle gestite ed esterne. Se entrambi i tipi di tabelle si trovano nella stessa directory, l'eliminazione dei dati dalle tabelle gestite potrebbe comportare la perdita di dati anche dalle tabelle esterne.
Per ulteriori informazioni, vedere connettore HDFS.
Criteri IAM necessari
È necessario aggiungere criteri per consentire al principal risorsa del metastore l'accesso alle posizioni di memorizzazione.
<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>'}
Per consentire a Metastore di creare in modo dinamico bucket per database utilizzando l'impostazione del parametro
spark.conf
oci.dcat.metastore.create.bucket.per.db = true, aggiungere i criteri riportati di seguito.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 un Admin
e gli utenti nel gruppo Administrators
hanno accesso a tutte le risorse del metastore Data Catalog. In qualità di Admin
, è possibile utilizzare i criteri riportati di seguito per fornire l'accesso a tutte le risorse del 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>
Questi criteri sono obbligatori, a meno che non vengano definiti criteri con filtro generico per le risorse a livello di catalogo, database o tabella. Per ulteriori informazioni, vedere Criteri IAM obbligatori per il controllo dell'accesso con filtro generico.
Controllo dell'accesso a grana grossa nel metastore di Data Catalog
Per impostazione predefinita, il controllo dell'accesso con filtro generico è disabilitato, pertanto è necessario definire i criteri necessari per accedere a tutte le risorse del metastore. Vedere Criteri IAM obbligatori. Dopo aver definito questi criteri, impostare il parametro
Spark.Conf
su true
. Per le soluzioni basate su Hive o HiveServer2, impostare oci.dcat.metastore.enable.cgac = true
. Per le soluzioni basate su Spark o Spark, impostare spark.hadoop.oci.dcat.metastore.enable.cgac = true
.Criteri IAM necessari per il controllo dell'accesso con filtro approssimativo
Utilizzare i criteri riportati di seguito per fornire l'accesso alle risorse a livello di catalogo, database o tabella.
- L'applicazione dei criteri a livello di database o di tabella richiede l'autorizzazione per gestire
<hive-default>
. - Quando i criteri vengono applicati a livello di database o di tabella, gli utenti del gruppo non possono visualizzare o elencare i database e le tabelle creati da un altro utente.
Consenti accesso a risorse a livello di catalogo:
- Uso di
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 di
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
Il nome, la chiave e l'istruzione criterio di esempio sono disponibili nella pagina del metastore nella sezione Risorse.Quando si crea un criterio per un nuovo catalogo, è necessario creare anche un criterio per il database predefinito creato come parte di tale catalogo.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>}
Consentire a <specific-group>
di accedere alle risorse a livello di database o di tabella per un catalogo specifico, in cui l'utente ha accesso alle risorse figlio di tale catalogo:
- Uso di
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 di
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 = '*'}
Consentire a <specific-group>
di accedere alle risorse a livello di database per un catalogo specifico applicando uno dei criteri riportati di seguito.
- Uso di
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 di
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>'}
Consentire a <specific-group>
di accedere alle risorse a livello di tabella per un database specifico applicando uno dei criteri riportati di seguito.
- Uso di
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 di
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>'}
Risorse aggiuntive
Ecco alcune risorse che puoi utilizzare per saperne di più sui metastores:
Messaggio di blog
Migliorare la collaborazione degli utenti utilizzando OCI Data Flow e Data Catalog Metastore