Konfigurera automatisk inläsning för produktionsarbetsbelastningar
Databricks rekommenderar att du följer metodtipsen för direktuppspelning för att köra automatisk inläsning i produktion.
Databricks rekommenderar att du använder Auto Loader i Delta Live Tables för inkrementell datainmatning. Delta Live Tables utökar funktionerna i Apache Spark Structured Streaming och gör att du bara kan skriva några rader deklarativ Python eller SQL för att distribuera en datapipeline av produktionskvalitet med:
- Beräkningsinfrastruktur för automatisk skalning för kostnadsbesparingar
- Datakvalitetskontroller med förväntningar
- Automatisk schemautvecklingshantering
- Övervakning via mått i händelseloggen
Övervaka automatisk inläsning
Köra frågor mot filer som identifieras av autoinläsaren
Kommentar
Funktionen cloud_files_state
är tillgänglig i Databricks Runtime 11.3 LTS och senare.
Auto Loader tillhandahåller ett SQL-API för att inspektera tillståndet för en dataström. Med hjälp av cloud_files_state
funktionen kan du hitta metadata om filer som har identifierats av en automatisk inläsningsström. Fråga bara från cloud_files_state
och ange den kontrollpunktsplats som är associerad med en automatisk inläsningsström.
SELECT * FROM cloud_files_state('path/to/checkpoint');
Lyssna på stream-uppdateringar
För att ytterligare övervaka automatiska inläsningsströmmar rekommenderar Databricks att du använder Apache Sparks gränssnitt för strömningsfrågaslyssnare.
Automatisk inläsning rapporterar mått till lyssnaren för strömningsfråga i varje batch. Du kan visa hur många filer som finns i kvarvarande uppgifter och hur stora kvarvarande uppgifter som finns i måtten numFilesOutstanding
och numBytesOutstanding
under fliken Rådata på instrumentpanelen för strömningsfrågans förlopp:
{
"sources" : [
{
"description" : "CloudFilesSource[/path/to/source]",
"metrics" : {
"numFilesOutstanding" : "238",
"numBytesOutstanding" : "163939124006"
}
}
]
}
I Databricks Runtime 10.4 LTS och senare, när du använder filmeddelandeläget, innehåller måtten även det ungefärliga antalet filhändelser som finns i molnkön som approximateQueueSize
för AWS och Azure.
Kostnadsöverväganden
När du kör Auto Loader är din huvudsakliga kostnadskälla kostnaden för beräkningsresurser och filidentifiering.
För att minska beräkningskostnaderna rekommenderar Databricks att du använder Databricks-jobb för att schemalägga automatisk inläsning som batchjobb med i Trigger.AvailableNow
stället för att köra det kontinuerligt så länge du inte har krav på låg svarstid. Se Konfigurera utlösarintervall för strukturerad direktuppspelning.
Kostnader för filidentifiering kan komma i form av LIST-åtgärder på dina lagringskonton i kataloglistningsläge och API-begäranden på prenumerationstjänsten och kötjänsten i filmeddelandeläge. För att minska kostnaderna för filidentifiering rekommenderar Databricks:
- Tillhandahålla en
ProcessingTime
utlösare när automatisk inläsning körs kontinuerligt i kataloglistningsläge - Att skapa filuppladdningar till ditt lagringskonto i lexikal ordning för att utnyttja inkrementell lista (inaktuell) när det är möjligt
- Använda filmeddelanden när inkrementell lista inte är möjlig
- Använda resurstaggar för att tagga resurser som skapats av Auto Loader för att spåra dina kostnader
Använda Trigger.AvailableNow och hastighetsbegränsning
Kommentar
Finns i Databricks Runtime 10.4 LTS och senare.
Automatisk inläsning kan schemaläggas att köras i Databricks-jobb som ett batchjobb med hjälp Trigger.AvailableNow
av . Utlösaren AvailableNow
instruerar autoinläsaren att bearbeta alla filer som kom innan frågans starttid. Nya filer som laddas upp när strömmen har startat ignoreras till nästa utlösare.
Med Trigger.AvailableNow
sker filidentifiering asynkront med databehandling och data kan bearbetas över flera mikrobatcher med hastighetsbegränsning. Automatisk inläsning bearbetar som standard högst 1 000 filer varje mikrobatch. Du kan konfigurera cloudFiles.maxFilesPerTrigger
och cloudFiles.maxBytesPerTrigger
konfigurera hur många filer eller hur många byte som ska bearbetas i en mikrobatch. Filgränsen är en hård gräns, men bytegränsen är en mjuk gräns, vilket innebär att fler byte kan bearbetas än den angivna maxBytesPerTrigger
. När båda alternativen tillhandahålls tillsammans bearbetar Auto Loader så många filer som behövs för att nå en av gränserna.
Kvarhållning av händelser
Automatisk inläsare håller reda på identifierade filer på kontrollpunktsplatsen med hjälp av RocksDB för att tillhandahålla inmatningsgarantier exakt en gång. Databricks rekommenderar starkt att du använder cloudFiles.maxFileAge
alternativet för alla dataströmmar med hög volym eller lång livslängd. Det här alternativet upphör att gälla händelser från kontrollpunktsplatsen, vilket påskyndar autoinläsningens starttid. Starttiden kan växa till minuter per autoinläsningskörning, vilket medför onödiga kostnader när du har en övre gräns för den maximala åldern för filer som ska lagras i källkatalogen. Det minsta värde som du kan ange för cloudFiles.maxFileAge
är "14 days"
. Borttagningar i RocksDB visas som tombstone-poster. Därför bör du förvänta dig att lagringsanvändningen ökar tillfälligt när händelserna upphör att gälla innan den börjar plana ut.
Varning
cloudFiles.maxFileAge
tillhandahålls som en mekanism för kostnadskontroll för datauppsättningar med stora volymer. Om du justerar cloudFiles.maxFileAge
för aggressivt kan det orsaka problem med datakvaliteten, till exempel duplicerad inmatning eller filer som saknas. Därför rekommenderar Databricks en konservativ inställning för cloudFiles.maxFileAge
, till exempel 90 dagar, vilket liknar vad jämförbara datainmatningslösningar rekommenderar.
Om du försöker justera cloudFiles.maxFileAge
alternativet kan det leda till att obearbetade filer ignoreras av Auto Loader eller att redan bearbetade filer upphör att gälla och sedan bearbetas på nytt, vilket orsakar duplicerade data. Här följer några saker att tänka på när du väljer :cloudFiles.maxFileAge
- Om strömmen startas om efter en lång tid ignoreras filaviseringshändelser som hämtas från kön som är äldre än
cloudFiles.maxFileAge
de som ignoreras. På samma sätt, om du använder kataloglistan, filer som kan ha dykt upp under den nedtid som är äldre äncloudFiles.maxFileAge
ignoreras. - Om du använder kataloglistningsläget och använder
cloudFiles.maxFileAge
, till exempel inställt på"1 month"
, stoppar du strömmen och startar om strömmen medcloudFiles.maxFileAge
inställt på"2 months"
, filer som är äldre än 1 månad, men senare än 2 månader bearbetas på nytt.
Om du anger det här alternativet första gången du startar dataströmmen matar du inte in data som är äldre än cloudFiles.maxFileAge
. Om du vill mata in gamla data bör du därför inte ange det här alternativet när du startar dataströmmen för första gången. Du bör dock ange det här alternativet vid efterföljande körningar.
Utlösa vanliga återfyllnad med hjälp av cloudFiles.backfillInterval
Automatisk inläsning kan utlösa asynkrona återfyllnad vid ett visst intervall, till exempel en dag för att fylla på en gång om dagen eller en vecka för att fylla på igen en gång i veckan. System för filhändelsemeddelanden garanterar inte 100 % leverans av alla filer som har laddats upp och tillhandahåller inte strikta serviceavtal för svarstiden för filhändelserna. Databricks rekommenderar att du utlöser regelbundna återfyllnad med automatisk inläsning med hjälp cloudFiles.backfillInterval
av alternativet för att garantera att alla filer identifieras inom ett visst serviceavtal om data är fullständiga. Att utlösa vanliga återfyllnad orsakar inte dubbletter.