पाठ 9 / 25

XComs और उनकी सीमाएँ

XComs छोटे metadata के लिए उपयोग करें और बड़ा डेटा बाहरी storage से भेजें।

Payload नहीं, संकेतक भेजें

XCom ("cross-communication") metadata database में रखा छोटा मान है जो एक task से दूसरे को दिया जाता है: file path, row count, ID। यह DataFrames या files जैसे बड़े डेटा के लिए नहीं है: इससे database फूलता है और scheduler धीमा होता है। बड़े डेटा के लिए उसे object storage (S3, GCS) या warehouse table में लिखें, और XCom से सिर्फ़ स्थान भेजें। TaskFlow return values के लिए यह plumbing अपने आप करता है; classic operators के साथ ti.xcom_push / ti.xcom_pull उपयोग करें।

छोटे मान, बड़े विचार

Tasks छोटे मान XComs से साझा करते हैं, तारीख़ों व parameters के लिए templates उपयोग करते हैं और secrets connections से पढ़ते हैं।

तीन साधन: XCom, templates, connections।
चित्र 3.1 — XCom, templates और connections।

डेटा नहीं, स्थान भेजें

पहला task बड़ी फ़ाइल लिखता है और सिर्फ़ उसका path लौटाता है; दूसरा task path पाता है। (उदाहरण; write_parquet और read_parquet आपके अपने कोड के प्रतीक हैं।)

@task
def extract(ds=None) -> str:
    path = f"s3://lake/orders/dt={ds}/raw.parquet"
    write_parquet(fetch_orders(ds), path)      # big data goes to storage
    return path                                 # only a short string goes to XCom

@task
def transform(path: str) -> str:
    df = read_parquet(path)
    out = path.replace("raw", "clean")
    write_parquet(clean(df), out)
    return out

XCom का आकार देखें

UI पन्ने धीमे हों या metadata database बढ़ रहा हो तो बड़े XCom मान जाँचें। अंगूठा-नियम के रूप में हर एक को कुछ kilobytes से कम रखें।

त्वरित जाँच: 2 GB के dataset के लिए XCom से क्या भेजना चाहिए?

  • कुछ नहीं, XCom वर्जित है
  • पूरा dataset
  • सिर्फ़ उसका storage स्थान
  • एक screenshot
Answer

सिर्फ़ उसका storage स्थान — XCom छोटे metadata के लिए है; बड़ा डेटा बाहरी storage में होना चाहिए।