Dask 스케줄러가 비어 있음 / 그래프가 표시되지 않음

Nov 19 2020

다음과 같은 설정이 있습니다.

# 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()

이 로직은 luigi에서 빌려 왔으며 실행할 작업을 제어하기 위해 if 문과 잘 작동합니다.

그러나 일부 작업은 SQL에서 많은 양의 데이터를로드하고 GIL 동결 경고를 발생시킵니다 (적어도 문제를 일으키는 줄을 정확히 진단하기가 어렵 기 때문에 이것은 내 의심입니다). 때때로 8787에 표시된 그래프 / 모니터링에 아무것도 표시되지 않는 scheduler empty경우도 있습니다. 앱이 정지 된 dask로 인해 발생한 것 같습니다. dask에서 SQL에서 많은 양의 데이터를로드하는 가장 좋은 방법은 무엇입니까? (MSSQL 및 Oracle). 현재 이것은 sqlalchemy조정 된 설정으로 이루어집니다. 추가 async하고 await도움이 될까요?

그러나 일부 작업은 약간 느려서 내부적으로 dask.dataframe또는 같은 것을 사용하고 싶습니다 bag. 문서는 지연된 내부 전화 지연에 대해 조언합니다. 이 또한 dataframebag. 전체 스크립트는 단일 40 코어 머신에서 실행됩니다.

사용 bag.starmap하면 다음과 같은 그래프가 표시됩니다.

계산이 해당 작업에 도달하고 계산이 내부에서 호출되면 위쪽 직선이 추가 / 발견됩니다.

답변

ic_fl2 Nov 24 2020 at 10:15

기계가 매우 바쁘고 원하는대로 상태 업데이트 및 보케 플롯을 표시하기 위해 고군분투하고 있다는 것 외에 다른 운율이나 이유가없는 것 같습니다.