Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I denna artikeltext beskrivs en metod för att vidareanvända Hive-metastore per arbetsyta när din Azure Databricks-arbetsyta är aktiverad för Unity Catalog.
Om din arbetsyta var i tjänst innan den aktiverades för Unity Catalog har den förmodligen ett Hive-metaarkiv som innehåller data som du kanske vill fortsätta att använda. Den här artikeln beskriver hur du fortsätter att arbeta med tabeller som är registrerade i ett Hive-metaarkiv.
Important
Hive-metaarkivet per arbetsyta är en äldre funktion och instruktionerna i den här artikeln representerar äldre arbetsflöden.
Tabeller i Hive-metaarkivet drar inte nytta av den fullständiga uppsättningen säkerhets- och styrningsfunktioner som tillhandahålls av Unity Catalog, till exempel inbyggd granskning, ursprung och åtkomstkontroll. Databricks rekommenderar att du migrerar tabellerna och arbetsbelastningarna som refererar till dem till Unity Catalog och inaktiverar direkt åtkomst till Hive-metaarkivet.
Det finns två tillgängliga migreringsvägar:
Uppgradera alla tabeller som är registrerade i Hive-metaarkivet till Unity Catalog.
Federera Hive Metastore till Unity Catalog med Hive Metastore-federation för en mer gradvis metod. Hive-metaarkivfederationen skapar en sekundär katalog i Unity Catalog som speglar Hive-metaarkivet.
Se Uppgradera en Azure Databricks-arbetsyta till Unity Catalog.
Fråga det äldre Hive-metaarkivet i Unity Catalog
Unity Catalog-metaarkivet är additivt, vilket innebär att det kan användas med Hive-metaarkivet per arbetsyta i Azure Databricks. Hive-metaarkivet visas som en toppnivåkatalog med namnet hive_metastore i ett tre-nivåers namnområde.
Du kan till exempel referera till en tabell med namnet sales_raw i sales-schemat i det äldre Hive-metaarkivet med hjälp av följande notation:
SQL
SELECT * from hive_metastore.sales.sales_raw;
Python
display(spark.table("hive_metastore.sales.sales_raw"))
R
library(SparkR)
display(tableToDF("hive_metastore.sales.sales_raw"))
Scala
display(spark.table("hive_metastore.sales.sales_raw"))
Du kan också ange katalogen och schemat med en USE-instruktion:
SQL
USE hive_metastore.sales;
SELECT * from sales_raw;
Python
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
R
library(SparkR)
sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))
Scala
spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))
Åtkomstkontroll i Unity Catalog jämfört med det äldre Hive-metaarkivet
Om du har konfigurerat äldre tabellåtkomstkontroll i Hive-metaarkivet, fortsätter Databricks att framtvinga dessa åtkomstkontroller för data i hive_metastore-katalogen för kluster som körs i standardåtkomstläge.
Åtkomstmodellen för Unity-katalogen skiljer sig något från äldre åtkomstkontroller:
-
Metaarkiv: Unity-katalogen är ett objekt på kontonivå och Hive-metaarkivet är ett objekt på arbetsytenivå. Behörigheter som definierats i
hive_metastorekatalog refererar alltid till lokala användare och grupper på arbetsytan. - Kontogrupper: Åtkomstkontrollprinciper i Unity Catalog tillämpas på kontogrupper, medan åtkomstkontrollprinciper för Hive-metaarkivet tillämpas på arbetsytelokala grupper. Se Gruppkällor.
-
USE CATALOGochUSE SCHEMAbehörigheter krävs för katalogen och schemat för alla åtgärder på objekt i katalogen eller schemat: Oavsett vilka privilegier en principal har på en tabell, måste principalen också haUSE CATALOGprivilegiet på den överordnade katalogen för att få åtkomst till schemat ochUSE SCHEMAprivilegiet för att komma åt objekt inom schemat. Med åtkomstkontroller på arbetsytenivå ger beviljande avUSAGEi rotkatalogen automatisktUSAGEpå alla databaser, menUSAGEi rotkatalogen krävs inte. -
Vyer: I Unity Catalog behöver ägaren av en vy inte vara ägare till vyns refererade tabeller och vyer. Behörigheten
SELECTär tillräcklig, tillsammans medUSE SCHEMApå vyernas överordnade schema ochUSE CATALOGpå den överordnade katalogen. Med åtkomstkontroller på arbetsytenivå måste ägaren av en vy vara ägare till alla refererade tabeller och vyer. -
Inget stöd för
ANY FILEellerANONYMOUS FUNCTION: I Unity Catalog finns det inget koncept av enANY FILEellerANONYMOUS FUNCTIONskyddsobjekt som skulle möjliggöra för en användare utan privilegier att köra privilegierad kod. -
Inget stöd för
DENY: Unity Catalog-privilegiemodellen bygger på principen om lägsta behörighet. Privilegier som inte beviljas nekas implicit. -
Ingen
READ_METADATAbehörighet: Unity Catalog hanterar åtkomst för att visa metadata på ett annat sätt. Se referens för Unity Catalog-behörigheter.
Kopplingar mellan Unity Catalog- och Hive-metaarkivobjekt
Genom att använda notering på tre nivåer kan du koppla data i ett Unity Catalog-metaarkiv med data i det äldre Hive-metaarkivet.
Note
En koppling med data i det äldre Hive-metaarkivet fungerar bara på arbetsytan där dessa data finns. Om du försöker köra en sådan koppling i en annan arbetsyta uppstår ett fel. Azure Databricks rekommenderar att du uppgradera äldre tabeller och vyer till Unity Catalog.
I följande exempel kopplas resultat från tabellen sales_current i det äldre Hive-metaarkivet med sales_historical-tabellen i Unity Catalog-metaarkivet när fälten order_id är lika.
SQL
SELECT * FROM hive_metastore.sales.sales_current
JOIN main.shared_sales.sales_historical
ON hive_metastore.sales.sales_current.order_id = main.shared_sales.sales_historical.order_id;
Python
dfCurrent = spark.table("hive_metastore.sales.sales_current")
dfHistorical = spark.table("main.shared_sales.sales_historical")
display(dfCurrent.join(
other = dfHistorical,
on = dfCurrent.order_id == dfHistorical.order_id
))
R
library(SparkR)
dfCurrent = tableToDF("hive_metastore.sales.sales_current")
dfHistorical = tableToDF("main.shared_sales.sales_historical")
display(join(
x = dfCurrent,
y = dfHistorical,
joinExpr = dfCurrent$order_id == dfHistorical$order_id))
Scala
val dfCurrent = spark.table("hive_metastore.sales.sales_current")
val dfHistorical = spark.table("main.shared_sales.sales_historical")
display(dfCurrent.join(
right = dfHistorical,
joinExprs = dfCurrent("order_id") === dfHistorical("order_id")
))
Standardkatalog
En standardkatalog konfigureras för varje arbetsyta som är aktiverad för Unity Catalog.
Om du utelämnar katalognamnet på den översta nivån när du utför dataåtgärder antas standardkatalogen.
Standardkatalogen som ursprungligen konfigurerades för din arbetsyta beror på hur din arbetsyta har aktiverats för Unity Catalog:
- Om din arbetsyta aktiverades automatiskt för Unity Catalog angavs den arbetsytekatalogen som standardkatalog. Se Automatisk aktivering av Unity Catalog.
- Om din arbetsyta har aktiverats för Unity Catalog manuellt angavs
hive_metastorekatalog som standardkatalog.
Om du övergår från Hive-metaarkivet till Unity Catalog på en befintlig arbetsyta är det klokt att använda hive_metastore som standardkatalog för att undvika att påverka befintlig kod som refererar till hive-metaarkivet om du inte har migrerat hive-metaarkivet helt.
Information om hur du hämtar och växlar standardkatalogen finns i Hantera standardkatalogen
Behörigheter för klusteromfattande dataåtkomst
När du använder Hive-metaarkivet tillsammans med Unity Catalog används autentiseringsuppgifter för dataåtkomst som är associerade med klustret för att komma åt Hive-metaarkivdata men inte data som registrerats i Unity Catalog.
Om användarna kommer åt sökvägar som ligger utanför Unity Catalog (till exempel en sökväg som inte har registrerats som en tabell eller extern plats) används de åtkomstautentiseringsuppgifter som tilldelats klustret.
Anslutningsgränser för Hive-metaarkivdatabas
Azure Databricks-hostade gamla Hive-metastore har resursgränser för att garantera tillförlitliga tjänster, inklusive begränsningar för samtidiga (aktiva) anslutningar och anslutningar per timme. Om arbetsbelastningarna överskrider dessa gränser kan kluster och jobb stöta på anslutningsfel för metaarkiv eller misslyckas med att starta.
Så här undviker du att nå dessa gränser:
- Migrera till Unity Catalog: Den mest effektiva metoden är att uppgradera tabeller och inaktivera direkt åtkomst till Hive-metaarkivet. Unity Catalog använder inte det äldre Hive-metaarkivet, så Hive-metaarkivspecifika gränser för databasanslutning gäller inte längre. Se Uppgradera en Azure Databricks-arbetsyta till Unity Catalog.
- Optimera arbetsbelastningsorkestreringen för att jämna ut toppkonkurrens: Undvik synkroniserade jobb- och klusterstarter, begränsa utbredning av fanout och minimera tillfälliga aktivitetstoppar för Hive-metadatakatalogen som ökar sannolikheten för anslutningsgränsbrott.
Inaktivera Åtkomst till Hive-metaarkiv efter migrering
När du har migrerat tabellerna till Unity Catalog rekommenderar Databricks att du uttryckligen inaktiverar direkt åtkomst till Hive-metaarkivet. Som standard fortsätter Azure Databricks-beräkningskluster att ansluta till Hive-metaarkivet även efter migreringen, såvida du inte uttryckligen inaktiverar Åtkomst till Hive-metaarkiv.
Du kan inaktivera direkt åtkomst till Hive-metaarkivet i hela arbetsytan eller individuellt per beräkningskluster. Se Inaktivera åtkomst till Hive-metaarkivet som används av din Azure Databricks-arbetsyta.