Scheduler Dask vuoto / grafico non visualizzato

Nov 19 2020

Ho una configurazione come segue:

# etl.py
from dask.distributed import Client
import dask
from tasks import task1, task2, task3

def runall(**kwargs):
    print("done")


def etl():
    client = Client()

    tasks = {}
    tasks['task1'] = dask.delayed(task)(*args)
    tasks['task2'] = dask.delayed(task)(*args)
    tasks['task3'] = dask.delayed(task)(*args)

     out = dask.delayed(runall)(**tasks)
     out.compute()

Questa logica è stata presa in prestito da luigi e funziona bene con le istruzioni if ​​per controllare quali attività eseguire.

Tuttavia, alcune delle attività caricano grandi quantità di dati da SQL e causano avvisi di blocco GIL (almeno questo è il mio sospetto in quanto è difficile diagnosticare quale linea causa esattamente il problema). A volte il grafico / monitoraggio mostrato su 8787 non mostra nulla scheduler empty, sospetto che siano causati dal blocco del dask dell'app. Qual è il modo migliore per caricare grandi quantità di dati da SQL in dask. (MSSQL e Oracle). Al momento questo è dovuto alle sqlalchemyimpostazioni ottimizzate. Aggiungere asynce awaitaiutare?

Tuttavia, alcune attività sono un po 'lente e mi piacerebbe usare cose come dask.dataframeo baginternamente. I dottori sconsigliano di chiamare in ritardo dentro ritardato. Questo vale anche per dataframee bag. L'intero script viene eseguito su una singola macchina a 40 core.

Usando bag.starmapottengo un grafico come questo:

dove le linee rette superiori vengono aggiunte / scoperte una volta che il calcolo raggiunge quel compito e il calcolo viene chiamato al suo interno.

Risposte

ic_fl2 Nov 24 2020 at 10:15

Sembra che non ci siano rime o motivi diversi dal fatto che la macchina era / è molto impegnata e fatica a mostrare gli aggiornamenti di stato e le trame bokeh come desiderato.