Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Automatische Loader-pijplijnen vereisen actieve bewaking om problemen te detecteren, zoals groeiende achterstanden, schemadrift, beschadigde gegevens en vastgelopen stromen voordat ze van invloed zijn op downstreamgebruikers. Op deze pagina wordt beschreven hoe u belangrijke metrische gegevens bewaakt, de status op bestandsniveau opvraagt, dashboards voor waarneembaarheid bouwt en veelvoorkomende problemen oplost.
Zie Auto Loader configureren voor productieworkloads voor details over de productieconfiguratie. Zie Auto Loader best practices voor aanbevolen procedures voor configuratie.
Prerequisites
Verschillende monitoringworkflows op deze pagina maken gebruik van cloud_files_state() om de innamestatus per bestand te monitoren, zoals backlogquery's, latentieberekeningen en detectie van schemadrift.
cloud_files_state() is een tabelwaardefunctie die de opnamestatus op bestandsniveau retourneert voor een controlepunt voor het automatisch laden. Niet alle velden zijn standaard beschikbaar. Beschikbaarheid is afhankelijk van uw Databricks Runtime-versie en -configuratie:
-
Databricks Runtime 18.2 en hoger:
discovery_time,processed_timeencommit_timezijn automatisch beschikbaar. In Databricks Runtime 16.4-18.1 zijn deze velden alleen beschikbaar wanneercloudFiles.cleanSourcedeze zijn ingeschakeld. -
Databricks Runtime 16.4 en hoger met
cloudFiles.cleanSourceingeschakeld:archive_time,archive_modeenmove_locationzijn beschikbaar.
Het inschakelen cloudFiles.cleanSource heeft enige overhead voor de prestaties. Voer benchmarks uit op basis van uw workloads in een preproductieomgeving voordat u dit inschakelt in uw productieomgeving.
Additionally:
- Aantekeningen toevoegen aan opgenomen gegevens met de
_metadatakolom. Leg minimaalfile_pathvast enfile_modification_time. Zie kolom Met metagegevens van bestand. - Schakel de
_rescued_data- en_corrupt_record-kolommen in.
Belangrijke metrische gegevens voor automatisch laden
De volgende tabel bevat een overzicht van de belangrijkste metrische gegevens die moeten worden bewaakt voor AutoLoader-pijplijnen. Deze statistieken zijn beschikbaar via StreamingQueryListener voortgangsevents, waarbij Auto Loader-specifieke waarden worden weergegeven onder de metrics-map van elke bron.
| Metriek | Wat het u vertelt |
|---|---|
numFilesOutstanding |
Aantal bestanden in de achterstand die moet worden verwerkt |
numBytesOutstanding |
Grootte van de bestandsachterstand in bytes |
approximateQueueSize |
Diepte van de cloudwachtrij (alleen in de modus voor bestandsmeldingen) |
numInputRows |
Aantal verwerkte rijen per verwerkingsbatch |
inputRowsPerSecond |
Snelheid van aankomst van gegevens |
processedRowsPerSecond |
Verwerkingssnelheid |
durationMs Verdeling |
Hoe de tijd in elke batch wordt besteed |
Waar moet ik naar kijken?
De volgende patronen geven aan dat uw pijplijn mogelijk aandacht nodig heeft.
-
Groeiende
numFilesOutstanding: De achterstand loopt op. Je pijplijn kan de binnenkomende data niet bijhouden. -
processedRowsPerSecond<inputRowsPerSecond: De pijplijn verwerkt gegevens langzamer dan deze binnenkomt. -
Groot
durationMs.latestOffset: Het vinden van bestanden is traag. Overweeg om over te schakelen naar bestandsgebeurtenissen. -
Groot
durationMs.addBatch: gegevensverwerking is traag. Overweeg rekenkracht te schalen of transformaties te optimaliseren.
Zie bronmetriek van Auto Loader voor de volledige naslaginformatie.
Status op bestandsniveau opvragen met cloud_files_state
De cloud_files_state() tabelwaardefunctie biedt gedetailleerde informatie over elk bestand dat is gedetecteerd door automatisch laden. De volgende velden zijn beschikbaar. Velden die zijn gemarkeerd als Databricks Runtime 16.4 en hoger of 18.2 en hoger, worden alleen ingevuld onder de voorwaarden die worden beschreven in Vereisten.
| Veld | Type | Description |
|---|---|---|
path |
STRING |
Het pad van het bestand |
size |
BIGINT |
De grootte van het bestand in bytes |
create_time |
TIMESTAMP |
Toen het bestand is gemaakt |
discovery_time |
TIMESTAMP |
Wanneer automatisch laden het bestand heeft gedetecteerd (Databricks Runtime 16.4 en hoger) |
processed_time |
TIMESTAMP |
Wanneer Auto Loader het bestand heeft verwerkt (Databricks Runtime 16.4 en hoger) |
commit_time |
TIMESTAMP |
Wanneer het bestand is doorgevoerd in het controlepunt (Databricks Runtime 16.4 en hoger) |
archive_time |
TIMESTAMP |
Wanneer het bestand is gearchiveerd (vereist cloudFiles.cleanSource) |
archive_mode |
STRING |
MOVE, DELETE of NULL (vereist cloudFiles.cleanSource) |
move_location |
STRING |
Doelpad wanneer cloudFiles.cleanSource is MOVE |
ingestion_state |
STRING |
Huidige status van bestandsopname |
Onderzoek de status van de bestandsinname
De volgende query's hebben betrekking op veelvoorkomende diagnostische scenario's.
Alle niet-verwerkte bestanden zoeken (de huidige achterstand):
SELECT * FROM cloud_files_state('path/to/checkpoint')
WHERE ingestion_state != 'COMMITTED';
Gemiddelde opnamelatentie berekenen (tijd van het maken van bestanden tot doorvoeren):
SELECT avg(unix_timestamp(commit_time) - unix_timestamp(create_time)) AS avg_latency_seconds
FROM cloud_files_state('path/to/checkpoint')
WHERE commit_time IS NOT NULL AND create_time IS NOT NULL;
Beschadigde of overgeslagen bestanden zoeken:
SELECT path, ingestion_state, size, create_time
FROM cloud_files_state('path/to/checkpoint')
WHERE ingestion_state LIKE 'SKIPPED%';
Voortgang van archivering bijhouden (vereist cloudFiles.cleanSource):
SELECT archive_mode, count(*) AS file_count
FROM cloud_files_state('path/to/checkpoint')
GROUP BY archive_mode;
Zoek bestanden met een hoge latentie voor detectie-naar-doorvoer om knelpunten te identificeren:
SELECT
path,
size,
unix_timestamp(commit_time) - unix_timestamp(discovery_time) AS processing_latency_seconds,
unix_timestamp(commit_time) - unix_timestamp(create_time) AS end_to_end_latency_seconds
FROM cloud_files_state('path/to/checkpoint')
WHERE commit_time IS NOT NULL
ORDER BY end_to_end_latency_seconds DESC
LIMIT 20;
Zie de tabelwaardefunctie voor de volledige SQL-verwijzingcloud_files_state.
Auto Loader bewaken in Lakeflow-pijplijnen
Databricks raadt aan om Lakeflow-pijplijnen te gebruiken voor Auto Loader-pijplijnen in productie. Om te profiteren van de ingebouwde bewakingsmogelijkheden:
Sla het gebeurtenislogboek van Lakeflow-pijplijnen op in een Delta-tabel, zodat deze kan worden opgevraagd voor waarneembaarheidsgegevens. Configureer dit via de geavanceerde instellingen van de pijplijn of de API. Zie het gebeurtenislogboek van de pijplijn voor meer informatie.
Structureer uw pijplijn voor waarneembaarheid. Een goed gestructureerde AutoLoader-pijplijn in Lakeflow-pijplijnen bevat een
{table}_sourceweergave (de brondefinitie van de autolader), een{table}_bronzestreamingtabel (onbewerkte gegevensopname met_rescued_dataen_corrupt_recordkolommen), eencorrupt_records_sinkpijplijn die rijen met onparse gegevens in quarantaine plaatst en een{table}schone weergave voor downstreamverbruik.Definieer verwachtingen voor uw bronze-streamingtabellen om schemadrift en gegevenscorruptie te monitoren.
_rescued_data IS NULLdetecteert onverwachte schemawijzigingen en_corrupt_record IS NULLdetecteert onherstelbare gegevens. Lakeflow-pijplijnen evalueren deze verwachtingen wanneer gegevens binnenkomen en genereren een waarneembaarheidsspoor. U kunt verwachtingen configureren om een waarschuwing te geven, rijen te verwijderen of de pijplijn te laten mislukken.
Nadat u de event_log_raw-weergave voor uw pijplijn hebt gemaakt, gebruikt u de volgende query’s voor Auto Loader-specifieke metriek.
Doorvoer voor opname per stroom bewaken:
SELECT
origin.flow_name,
origin.update_id,
timestamp,
TRY_CAST(details:flow_progress.metrics.num_output_rows AS BIGINT) AS rows_written
FROM event_log_raw
WHERE event_type = 'flow_progress'
ORDER BY timestamp DESC;
Gegevensachterstand per stroom bewaken:
SELECT
origin.flow_name,
timestamp,
DOUBLE(details:flow_progress.metrics.backlog_bytes) AS backlog_bytes
FROM event_log_raw
WHERE event_type = 'flow_progress'
AND details:flow_progress.metrics.backlog_bytes IS NOT NULL
ORDER BY timestamp DESC;
Samenvatting van schendingen van de verwachting om schemadrift en beschadigde gegevens te detecteren:
SELECT
origin.flow_name,
explode(from_json(
details:flow_progress.data_quality.expectations,
'array<struct<name:string, dataset:string, passed_records:bigint, failed_records:bigint>>'
)) AS expectation
FROM event_log_raw
WHERE event_type = 'flow_progress'
AND details:flow_progress.data_quality.expectations IS NOT NULL;
Raadpleeg Pijplijnen bewaken en Gebeurtenislogboek van de pijplijn voor algemene richtlijnen voor het bewaken van Lakeflow-pijplijnen.
Auto Loader bewaken met Structured Streaming
Wanneer u Auto Loader buiten Lakeflow-pijplijnen uitvoert, gebruikt u de volgende methoden om Structured Streaming te monitoren.
- Implementeer een
StreamingQueryListenerom Auto Loader-specifieke metrieke gegevens van elke batch vast te leggen door uitsource.metricste lezen.
from pyspark.sql.streaming import StreamingQueryListener
class AutoLoaderMonitor(StreamingQueryListener):
def onQueryStarted(self, event):
pass
def onQueryProgress(self, event):
for source in event.progress.sources:
if "CloudFilesSource" in source.description:
metrics = source.metrics
files_outstanding = metrics.get("numFilesOutstanding", "0")
bytes_outstanding = metrics.get("numBytesOutstanding", "0")
rows_per_sec = source.processedRowsPerSecond
# Push metrics to your monitoring system (for example, write to a Delta table)
def onQueryIdle(self, event):
pass
def onQueryTerminated(self, event):
pass
spark.streams.addListener(AutoLoaderMonitor())
Opmerking
Verwerkingslogica in listeners kan de verwerking van query's vertragen. Beperk het rekenwerk in listener-callbacks en vermijd daar synchrone externe schrijfbewerkingen; stuur in plaats daarvan lichte telemetrie asynchroon uit of geef metingen door aan een afzonderlijke taak voor opslag.
Gebruik
numInputRows,inputRowsPerSecondenprocessedRowsPerSecondvan de voortgang van de bron tot het berekenen van doorvoer: bestanden per seconde en rijen per seconde voor elke batch.Vergelijk
create_timeencommit_timeuitcloud_files_state()om de opnamelatentie voor de end-to-end-latentie te berekenen. Voor de verwerking van latentie gebruikt u dedurationMsuitsplitsing (bijvoorbeeldlatestOffset,addBatchen andere gerapporteerde batchfasen) om te bepalen welke fase het knelpunt is.Gebruik
df.observe()om inline gegevenskwaliteitsmetriek rechtstreeks in het streaming-DataFrame te definiëren. Metrische gegevens zijn zichtbaar inStreamingQueryListenervoortgangsevenementen onderobservedMetrics.
from pyspark.sql.functions import count, lit, col
observed_df = df.observe(
"auto_loader_quality",
count(lit(1)).alias("total_rows"),
count(col("_rescued_data")).alias("rescued_rows"),
count(col("_corrupt_record")).alias("corrupt_rows")
)
- Gebruik
.queryName()deze functie om een unieke naam toe te wijzen aan elke stream, zodat u autoladerstreams gemakkelijker kunt onderscheiden op het tabblad Streaming van de Spark-gebruikersinterface en in bewakingsdashboards.
Zie Structured Streaming-query's bewaken in Azure Databricks voor de volledige referentie over het bewaken van Structured Streaming-query's.
Een dashboard voor waarneembaarheid bouwen
Combineer gegevens uit meerdere bronnen om een uitgebreid waarneembaarheidsdashboard te bouwen voor uw AutoLoader-pijplijnen. In deze tabel worden enkele voorgestelde bronnen weergegeven die u kunt gebruiken om uw waarneembaarheidsdashboard te structuren.
| Gegevensbron | Waarneembaarheidsgegevens |
|---|---|
cloud_files_state() |
Opnamestatus op bestandsniveau: detectie, verwerking, doorvoer en archiveringstijdstempels per bestand |
| Gebeurtenislogboek van Lakeflow-pijplijnen | Uitvoeringsgeschiedenis van de pijplijn, stroommetingen per batch en resultaten van verwachtingen voor gegevenskwaliteit |
| Pijplijnuitvoertabellen | Aantal rijen en gegevensvolume geschreven per opgenomen tabel |
Vervolgens kunt u waarneembaarheidsgegevens samenvoegen in toegewezen tabellen die fungeren als de basis voor dashboards en waarschuwingen:
- De statussen van pipeline-uitvoeringen (geslaagd of mislukt) in de tijd samenvatten, afgeleid van
event_type = 'update_progress'-gebeurtenissen. - Statistische metrische gegevens over bestandsopname (achterstandsgrootte, doorvoer, latentie per batch), afgeleid van
cloud_files_state()enevent_type = 'flow_progress'gebeurtenissen. - Tabelstatistieken ontwikkelen met behulp van rijaantallen en gegevensvolume per tabel, afgeleid van
num_output_rowsin het gebeurtenislogboek. - Verzamel foutopsporingsgegevens uit gedetailleerde foutlogboeken en verwachtingsschendingen per update, afgeleid van
event_type = 'flow_progress'-gebeurtenissen waarbijdata_qualityis ingevuld.
Deze samengevoegde tabellen kunnen een AI/BI-dashboard en SQL-waarschuwingen mogelijk maken. Aanbevolen dashboardvensters omvatten tijdlijn voor pijplijnuitvoeringsstatus, opnameachterstandstrend, doorvoertrend, distributie van opnamelatentie, metrische gegevens over gegevenskwaliteit, schemaontwikkelingsgebeurtenissen en status van bestandsarchivering.
Gebeurtenissen met schemawijzigingen bewaken
Gebruik de volgende methoden om schemawijzigingen te detecteren wanneer ze optreden.
- Niet-NULL-waarden in
_rescued_datain de aantallen verwachtingsovertredingen duiden op schemadrift. Doorzoek het gebeurtenislogboek voorfailed_records > 0op de verwachting vanno rescued data. - Wijzigingen in de
_schemasmap in het geconfigureerdecloudFiles.schemaLocation(of alleen binnen het controlepunt wanneer de schemalocatie niet afzonderlijk is ingesteld) geven aan dat de ontwikkeling van het schema is opgetreden. U kunt deze map peilen vanuit een afzonderlijke bewakingstaak. - Behandel een
onQueryTerminatedgebeurtenis niet gevolgd dooronQueryStartedvoor dezelfde stroomnaam als voldoende bewijs van de ontwikkeling van schema's. Streams worden om verschillende redenen opnieuw opgestart (cluster opnieuw opstarten, code-implementaties, tijdelijke opslagfouten). Correleer opnieuw opstarten met onafhankelijke signalen (_schemaswijzigingen in mappen of_rescued_dataschendingen van verwachtingen) voordat wordt geconcludeerd dat de ontwikkeling van het schema is opgetreden. - Gebruik
_metadata.file_pathdit om te bepalen welke bestanden schemawijzigingen hebben geïntroduceerd. Voeg dit toe aancloud_files_state()hetpathveld om schemawijzigingen te correleren met specifieke bestanden en batches.
Gebruik deze voorbeeldquery om recente schemadrift te detecteren via schendingen van verwachtingen:
SELECT
timestamp,
origin.flow_name,
exp.name AS expectation_name,
exp.failed_records
FROM (
SELECT
timestamp,
origin,
explode(from_json(
details:flow_progress.data_quality.expectations,
'array<struct<name:string, dataset:string, passed_records:bigint, failed_records:bigint>>'
)) AS exp
FROM event_log_raw
WHERE event_type = 'flow_progress'
AND details:flow_progress.data_quality.expectations IS NOT NULL
)
WHERE exp.name = '<rescued-data expectation name>'
AND exp.failed_records > 0
ORDER BY timestamp DESC;
Waarschuwingen instellen voor veelvoorkomende problemen
Gebruik Databricks SQL-waarschuwingen of pijplijnmeldingen om problemen te detecteren voordat ze van invloed zijn op downstreamgebruikers.
De volgende SQL detecteert een groeiende achterstand en kan worden gebruikt als basis voor een Databricks SQL-waarschuwing. Stel in dat dit periodiek wordt uitgevoerd (bijvoorbeeld elke 5 minuten) en geef een waarschuwing wanneer het resultaat niet leeg is.
-- Alert when backlog exceeds threshold or trends upward across recent batches
WITH recent_backlog AS (
SELECT
origin.flow_name,
timestamp,
DOUBLE(details:flow_progress.metrics.backlog_bytes) AS backlog_bytes,
ROW_NUMBER() OVER (PARTITION BY origin.flow_name ORDER BY timestamp DESC) AS rn
FROM event_log_raw
WHERE event_type = 'flow_progress'
AND details:flow_progress.metrics.backlog_bytes IS NOT NULL
)
SELECT flow_name, backlog_bytes, timestamp
FROM recent_backlog
WHERE rn = 1
AND backlog_bytes > 1073741824 -- alert when backlog exceeds 1 GB
De volgende tabel bevat een overzicht van aanbevolen waarschuwingsvoorwaarden:
| Wat u moet detecteren | Hoe u dit kunt detecteren | Wanneer moet u een waarschuwing geven |
|---|---|---|
| Groeiende achterstand |
numFilesOutstanding stijgend |
Aanhoudende toename over meerdere batches |
| Vastgelopen stroom | Geen voortgangsevenementen | Geen gebeurtenissen voor N minuten (op basis van het verwachte triggerinterval) |
| Hoge opnamelatentie | commit_time - create_time |
De SLA-drempelwaarde overschrijdt |
| Degradatie van gegevenskwaliteit | Verwachtingsfoutpercentage | Het toenemende percentage rijen dat niet aan de verwachtingen voldoet |
| Gebeurtenis schemaontwikkeling | _rescued_data IS NOT NULL |
Alle niet-NULL-waarden in het aantal verwachtingsovertredingen |
| Traag zoeken naar bestanden | durationMs.latestOffset |
Aanzienlijk hoger dan basislijn |
Veelvoorkomende problemen oplossen
In de volgende tabel worden veelvoorkomende problemen met de pijplijn voor automatisch laadprogramma's, de waarschijnlijke oorzaken en aanbevolen acties beschreven om ze op te lossen.
| Issue | Mogelijke oorzaak | Aanbevolen actie |
|---|---|---|
| Achterstand groeit sneller dan verwerking | Te weinig rekenkracht, scheve datadistributie of geknepen aanvraaglimieten | Schaal de rekenkracht op, controleer op scheefheid met de Spark UI en bekijk de maxFilesPerTrigger instellingen om de batchgrootte te beheren |
| Bestanden worden niet gedetecteerd | Bestandsgebeurtenissen zijn onjuist geconfigureerd, machtigingsprobleem of stream worden niet binnen 7 dagen uitgevoerd | Controleer de machtigingen voor externe opslaglocaties, controleer de configuratie van bestandsgebeurtenissen in de Unity Catalog-interface en zorg ervoor dat de stream minstens elke 7 dagen wordt uitgevoerd om te voorkomen dat de RocksDB-status verloopt |
| Het opstarten van stream duurt te lang | Grote controlepuntstatus downloaden (RocksDB) | Upgrade naar Databricks Runtime 15.3 en hoger voor asynchroon laden van status, waardoor de opstarttijd met ongeveer 90% wordt verkort |
| Dubbele bestandsverwerking | Agressieve cloudFiles.maxFileAge instellingen of beschadiging van controlepunt |
Gebruik een conservatieve maxFileAge (minimaal 90+ dagen), controleer de integriteit van controlepunten en vermijd levenscyclusbeleid voor controlepuntopslag |
| Schemaontwikkeling waardoor pijplijn opnieuw wordt opgestart | Regelmatige of niet-compatibele schemawijzigingen | Controleer schemaEvolutionMode, schakel over op addNewColumnsWithTypeWidening voor typepromoties, of gebruik het varianttype voor zeer dynamische schema's |
| Corrupte gegevens stapelen zich op in sink | Problemen met kwaliteit van brongegevens | Controleer de _corrupt_record quarantaine-sink op patronen, bekijk hoe brongegevens worden gegenereerd en overweeg upstream-validatie toe te voegen |
discovery_time en commit_time niet ingevuld |
Wordt uitgevoerd op Databricks Runtime lager dan 18.2 zonder cleanSource |
Voer een upgrade uit naar Databricks Runtime 18.2 en hoger of schakel cloudFiles.cleanSource in op Databricks Runtime 16.4–18.1 |
Zie veelgestelde vragen over automatisch laden voor aanvullende probleemoplossing.