Datenkatalog-Metastore
Apache Hive ist ein Data Warehousing Framework, das Lese-, Schreib- oder Verwaltungsvorgänge für große Datasets in verteilten Systemen erleichtert.
Data Catalog Metastore bietet ein hochverfügbares und skalierbares zentrales Metadaten-Repository für ein Hive-Cluster. Dabei werden Metadaten für Datenstrukturen wie Datenbanken, Tabellen und Partitionen in einer relationalen Datenbank gespeichert, die von in Object Storage verwalteten Dateien gesichert werden. Apache Spark SQL verwendet hierfür Data Catalog Metastore.
Die OCI Data Flow-, OCI Big Data Service- und OCI Data Science-Serviceinstanzen greifen auf den Datenkatalog-Metastore zu, um Schemadefinitionen für die Objekte in unstrukturierten und halbstrukturierten Datenassets, wie Objektspeicher, sicher zu speichern und abzurufen.
Voraussetzungen
- Verwaltete Tabelle: Der Metastore verwaltet das Tabellenobjekt.
- Externe Tabelle: Als Benutzer verwalten Sie das Tabellenobjekt.
Beim Erstellen des Metastores in Data Catalog geben Sie die URIs der Buckets an, in denen die verwalteten und externen Tabellen gespeichert sind. Das URI-Format muss lauten: oci://<bucket_name>@<namespace_name>/<folder name of your choice>
.
Es wird empfohlen, nicht denselben Speicherort für verwaltete und externe Tabellen zu verwenden. Wenn sich beide Tabellenarten im selben Verzeichnis befinden, kann das Löschen von Daten aus verwalteten Tabellen auch zu Datenverlusten aus externen Tabellen führen.
Weitere Informationen finden Sie unter HDFS-Connector.
Erforderliche IAM-Policys
Sie müssen Policys hinzufügen, um dem Metastore Resource Principal Zugriff auf Speicherorte zu gewähren.
<dg-metastore-ocid>
dargestellt: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>'}
Um zuzulassen, dass Metastore Buckets pro Datenbank mit der Parametereinstellung
spark.conf
oci.dcat.metastore.create.bucket.per.db = true dynamisch erstellt, fügen Sie die folgenden Policys hinzu: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>'}}
Nur eine Admin
und die Benutzer in der Gruppe Administrators
haben Zugriff auf alle Data Catalog-Metastore-Ressourcen. Als Admin
können Sie die folgenden Policys verwenden, um Zugriff auf alle Metastore-Ressourcen zu erteilen.
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>
Diese Policys sind obligatorisch, es sei denn, grob granulierte Policys werden für Ressourcen auf Katalog-, Datenbank- oder Tabellenebene definiert. Weitere Informationen finden Sie unter Erforderliche IAM-Policys für grob granulierte Zugriffskontrolle.
Grob granulierte Zugriffskontrolle im Data Catalog-Metastore
Standardmäßig ist die grob granulierte Zugriffskontrolle deaktiviert, sodass Sie die erforderlichen Policys für den Zugriff auf alle Metastore-Ressourcen definieren müssen. Siehe Erforderliche IAM-Policys. Nachdem Sie diese Policys definiert haben, setzen Sie den Parameter
Spark.Conf
auf true
. Legen Sie für Hive- oder HiveServer2-basierte Lösungen oci.dcat.metastore.enable.cgac = true
fest. Legen Sie für Spark- oder Spark-basierte Lösungen spark.hadoop.oci.dcat.metastore.enable.cgac = true
fest.Erforderliche IAM-Policys für grob granulierte Zugriffskontrolle
Verwenden Sie die folgenden Policys, um Zugriff auf Ressourcen auf Katalog-, Datenbank- oder Tabellenebene zu erteilen:
- Das Anwenden von Policys auf Datenbank- oder Tabellenebene erfordert die Berechtigung zum Verwalten von
<hive-default>
. - Wenn Policys auf Datenbank- oder Tabellenebene angewendet werden, können die Benutzer in der Gruppe die von einem anderen Benutzer erstellten Datenbanken und Tabellen nicht anzeigen oder auflisten.
Zugriff auf Ressourcen auf Katalogebene zulassen:
- Verwenden von
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>'}
- Verwenden von
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>'}
Hinweis
Name, Schlüssel und Beispiel-Policy-Anweisung sind auf der Metastore-Seite unter dem Abschnitt Ressourcen verfügbar.Wenn Sie eine Policy für einen neuen Katalog erstellen, müssen Sie auch eine Policy für die Standarddatenbank erstellen, die als Teil dieses Katalogs erstellt wurde.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>}
Lassen Sie zu, dass eine <specific-group>
auf Ressourcen auf Datenbank- oder Tabellenebene für einen bestimmten Katalog zugreift, wenn der Benutzer Zugriff auf die untergeordneten Ressourcen dieses Katalogs hat:
- Verwenden von
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 = '*'}
- Verwenden von
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 = '*'}
Lassen Sie zu, dass eine <specific-group>
auf Ressourcen auf Datenbankebene für einen bestimmten Katalog zugreifen kann, indem Sie eine der folgenden Policys anwenden:
- Verwenden von
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>'}
- Verwenden von
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>'}
Lassen Sie zu, dass eine <specific-group>
auf Ressourcen auf Tabellenebene für eine bestimmte Datenbank zugreift, indem Sie eine der folgenden Policys anwenden:
- Verwenden von
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>'}
- Verwenden von
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>'}
Zusätzliche Ressourcen
Im Folgenden finden Sie einige Ressourcen, mit denen Sie weitere Informationen zu Metastores erhalten:
Blogpost
Benutzerzusammenarbeit mit OCI Data Flow und Datenkatalog-Metastore verbessern