CI-/CD-munkafolyamatok a Databricksen

A CI/CD (folyamatos integráció és folyamatos teljesítés) a modern adatelemzés és -elemzés sarokköve lett, mivel biztosítja a kódmódosítások gyors és megbízható integrálását, tesztelését és üzembe helyezését. A Databricks felismeri, hogy a különböző CI/CD-követelmények a szervezeti beállítások, a meglévő munkafolyamatok és az adott technológiai környezet alapján vannak kialakítva, és rugalmas keretrendszert biztosít, amely támogatja a különböző CI/CD-beállításokat.

Ez a lap az ajánlott CI-/CD-munkafolyamatokat ismerteti, amelyek segítenek az egyedi igényeknek és korlátozásoknak megfelelő, robusztus, testreszabott CI/CD-folyamatok tervezésében és összeállításában. Ezeket az elemzéseket felhasználva felgyorsíthatja az adatelemzési és elemzési kezdeményezéseket, javíthatja a kódminőséget, és csökkentheti az üzembehelyezési hibák kockázatát.

A CI/CD alapelvei

A hatékony CI/CD-folyamatok a megvalósítási sajátosságoktól függetlenül alapvető alapelveket használnak. Az alábbi általános ajánlott eljárások a szervezeti beállításokra, a fejlesztői munkafolyamatokra és a felhőkörnyezetekre vonatkoznak, és biztosítják a különböző implementációk konzisztenciáját, függetlenül attól, hogy a csapat előnyben részesíti-e a jegyzetfüzetek első fejlesztési vagy infrastruktúra-kódkénti munkafolyamatait. Fogadja el ezeket az alapelveket védőkorlátként, miközben a szervezet technológiai vereméhez és folyamatához szabja a konkrétumokat.

  • Verziókövetés mindenben
    • Jegyzetfüzeteket, szkripteket, infrastruktúra-definíciókat (IaC) és feladatkonfigurációkat tárol a Gitben.
    • Használjon elágaztatási stratégiákat, például a Gitflow-t, amelyek igazodnak a standard fejlesztési, előkészítési és éles üzembehelyezési környezetekhez.
  • Tesztelés automatizálása
    • Az üzleti logika egységtesztjeinek implementálása kódtárak használatával, például a Python pytestje és a ScalaTest for Scala .
    • A jegyzetfüzet és a munkafolyamat funkcióinak ellenőrzése olyan eszközökkel, mint a Databricks CLI-csomag ellenőrzése.
    • Integrációs teszteket használhat munkafolyamatokhoz és adatfolyamokhoz, például a Spark DataFrame-hez készült chispa-hoz.
  • Infrastruktúra alkalmazása kódként (IaC)
    • Fürtök, feladatok és munkaterület-konfigurációk definiálása a DEklaratív automation-csomagok YAML vagy Terraform használatával.
    • Paraméterezze a környezetspecifikus beállításokat, mint például a fürt mérete és titkok, ahelyett hogy ezeket kódba ágyazná.
  • Környezetek elkülönítése
    • Tarts fenn külön munkaterületeket fejlesztéshez, előállításhoz és éles környezethez.
    • Az MLflow Modellregisztrációs adatbázis használata a modellek különböző környezetekben történő verziószámozásához.
  • Válasszon a felhőbeli ökoszisztémának megfelelő eszközöket:
    • Azure: Azure DevOps és Deklaratív automatizálási csomagok vagy Terraform.
    • AWS: GitHub Actions és Deklaratív automatizálási csomagok vagy Terraform.
    • GCP: Felhőbeli buildelési és deklaratív automatizálási csomagok vagy Terraform.
  • Visszaállítások monitorozása és automatizálása
    • Az üzembe helyezés sikerességi arányának, a feladatok teljesítményének és a tesztelési lefedettségnek a nyomon követése.
    • Automatizált visszaállítási mechanizmusok implementálása sikertelen üzembe helyezésekhez.
  • Eszközkezelés egységesítése
    • A Deklaratív Automation-csomagok használatával egyetlen egységként telepíthet kódot, feladatokat és infrastruktúrát. Kerülje a jegyzetfüzetek, tárak és munkafolyamatok silózott kezelését.

Note

A Databricks a számítási feladatok identitás-összevonását javasolja a CI/CD-hitelesítéshez. A számítási feladatok identitásának összevonása szükségtelenné teszi a Databricks-titkos kulcsok használatát, így ez a legbiztonságosabb módja az automatizált folyamatok Databricksbe történő hitelesítésének. Lásd: Számítási feladatok identitás-összevonásának engedélyezése a CI/CD-ben.

Deklaratív automatizálási csomagok CI/CD-hez

A Deklaratív Automation-csomagok (korábbi nevén Databricks Asset Bundles) hatékony, egységes megközelítést kínálnak a kód, munkafolyamatok és infrastruktúra Databricks-ökoszisztémán belüli kezeléséhez, és a CI/CD-folyamatokhoz ajánlottak. Ha ezeket az elemeket egyetlen YAML-alapú egységbe alakítja, a csomagok leegyszerűsítik az üzembe helyezést, és biztosítják a környezetek konzisztenciáját. A hagyományos CI/CD-munkafolyamatokhoz szokott felhasználók esetében azonban a csomagok bevezetése a gondolkodásmódváltást igényelheti.

A Java-fejlesztők például a Maven vagy a Gradle használatával készítik el a JARs-eket, egységteszteket futtatnak a JUnittal, és integrálják ezeket a lépéseket CI/CD-folyamatokba. Hasonlóképpen a Python-fejlesztők gyakran csomagolják kódjukat wheel formátumba és pytesttel tesztelnek, míg az SQL-fejlesztők a lekérdezés-ellenőrzésre és a digitális jegyzetek kezelésére összpontosítanak. A kötegekkel ezek a munkafolyamatok strukturáltabb és előíróbb formátumba alakulnak, hangsúlyozva a kód és az infrastruktúra kötegelését a zökkenőmentes üzembe helyezés érdekében.

A következő szakaszok azt vizsgálják, hogyan alakíthatják a fejlesztők a munkafolyamataikat a csomagok hatékony kihasználása érdekében.

A Deklaratív automatizálási csomagok használatának gyors megkezdéséhez próbáljon ki egy oktatóanyagot: Feladat fejlesztése Deklaratív Automation-kötegekkel vagy folyamatok fejlesztése Deklaratív Automation-csomagokkal.

Forrásvezérlő

A csomagok lehetővé teszik, hogy könnyen tartalmazzon mindent – forráskódot, összetevőket és konfigurációs fájlokat –, és ugyanabban a forráskódtárban keresse meg őket, de a csomagkonfigurációs fájlokat a kódhoz kapcsolódó fájloktól is elkülönítheti. A választás a csapat munkafolyamatától, a projekt összetettségétől és a CI/CD-követelményektől függ, de a munkafolyamatok és az ajánlott eljárások megosztásának egyszerűsítése érdekében a Databricks azt javasolja, hogy a kód- és csomagkonfigurációhoz is használjon egyetlen adattárat.

Emellett a Databricks egy csomagtartóalapú elágaztatási stratégiát javasol az egyesítési ütközések minimalizálása érdekében, és biztosítja, hogy a fő ág mindig üzembe helyezhető állapotban legyen, és mindig használjon verziószámozott összetevőket, például a Git véglegesítési kivonatait a Databricksbe vagy külső tárolóba való feltöltéskor a nyomon követhetőség és a visszaállítási képességek biztosítása érdekében.

Ezekről az ajánlott eljárásokról további információt a Forráskövetés című témakörben talál.

CI/CD-munkafolyamat kötegekkel

A Deklaratív Automation-csomagok használatával ajánlott egyszerű munkafolyamat a következő:

  1. A kód fordítása és tesztelése
    • Aktiválódik, amikor húzási kérelem érkezik vagy a fő ágra véglegesítés történik.
    • Kód fordítása és egységtesztek futtatása.
    • Adjon ki egy verziószámozott fájlt, például my-app-1.0.jar.
  2. Töltse fel és tárolja a lefordított fájlt, például egy JAR-t a Databricks Unity Catalog tárterületére.
    • Tárolja a lefordított fájlt egy Databricks Unity Catalog-kötetben vagy egy összetevő-adattárban, például az AWS S3-ban vagy az Azure Blob Storage-ban.
    • Használjon verziószámozási sémát, amely Git commit hash-okhoz vagy szemantikai verziószámozáshoz kötődik, például dbfs:/mnt/artifacts/my-app-${{ github.sha }}.jar.
  3. A csomag ellenőrzése
    • Futtassa a databricks bundle validate parancsot, hogy ellenőrizze a databricks.yml konfiguráció helyességét.
    • Ez a lépés biztosítja, hogy a helytelen konfigurációk, például a hiányzó kódtárak, korán felismerhetőek legyenek.
  4. A csomag üzembe helyezése
    • Használja a databricks bundle deploy csomagot a csomag üzembe helyezéséhez előkészítési vagy éles környezetben.
    • Hivatkozás a feltöltött lefordított kódtárra a következőben databricks.yml: . A hivatkozási kódtárakról további információt a Deklaratív Automation Bundles-kódtár-függőségek című témakörben talál.

CI/CD gépi tanuláshoz

A gépi tanulási projektek egyedi CI/CD-kihívásokat jelentenek a hagyományos szoftverfejlesztéshez képest. A CI/CD gépi tanulási projektekhez való implementálásakor valószínűleg a következőket kell figyelembe vennie:

  • Többcsapatos koordináció: Az adattudósok, mérnökök és MLOps-csapatok gyakran különböző eszközöket és munkafolyamatokat használnak. A Databricks egyesíti ezeket a folyamatokat az MLflow-val a kísérletkövetéshez, az OpenSharing for data governancehez és a deklaratív automation-csomagokhoz az infrastruktúra kódként való használatához.
  • Adatok és modellek verziószámozása: Az ML-folyamatok nem csak a kód követését igénylik, hanem betanítási adatsémákat, funkcióeloszlásokat és modellösszetevőket is. A Delta Lake ACID-tranzakciókat és időutazást biztosít az adatok verziószámozásához, míg az MLflow Modellregisztrációs adatbázis kezeli a modellkiválasztást.
  • Reprodukálhatóság a környezetekben: az ML-modellek adott adatoktól, kódtól és infrastruktúra-kombinációktól függnek. A deklaratív automatizálási csomagok biztosítják ezeknek az összetevőknek az atomi üzembe helyezését a fejlesztési, előkészítési és éles környezetekben, a YAML definíciók használatával.
  • Folyamatos újratanítás és monitorozás: A modellek adateltolódás miatt romlanak. A Lakeflow-feladatok lehetővé teszik az automatikus újratanítási folyamatokat, míg az MLflow integrálható a Prometheus és a Databricks adatminőség-monitorozásával a teljesítmény nyomon követéséhez.

MLOps veremek az ML CI/CD-hez

A Databricks az MLOps Stacksen keresztül kezeli az ML CI/CD összetettségét, amely egy éles szintű keretrendszer, amely egyesíti a Deklaratív Automation-csomagokat, az előre konfigurált CI-/CD-munkafolyamatokat és a moduláris ML-projektsablonokat. Ezek a rendszerek előmozdítják a bevált gyakorlatokat, és lehetőséget nyújtanak a rugalmasságra a többcsapatos együttműködésben az adatmérnöki, adattudományi és MLOps-szerepkörökben.

Team Responsibilities Példa kötegösszetevőkre Példatárgyak
Adatmérnökök ETL-folyamatok létrehozása, adatminőség kényszerítése Lakeflow-pipeline-ok YAML, klaszterszabályzatok etl_pipeline.yml, feature_store_job.yml
Adattudósok Modellbetanítási logika fejlesztése, metrikák ellenőrzése MLflow-projektek, jegyzetfüzet-alapú munkafolyamatok train_model.yml, batch_inference_job.yml
MLOps-mérnökök Üzembe helyezések vezénylése, folyamatok monitorozása Környezeti változók, irányítópultok monitorozása databricks.yml, lakehouse_monitoring.yml

Az ML CI/CD együttműködés a következőképpen nézhet ki:

  • Az adatmérnökök az ETL-folyamat módosításait kötegekre véglegesítik, automatikus sémaérvényesítést és átmeneti üzembe helyezést aktiválva.
  • Az adattudósok ml-kódot küldenek, amely egységteszteket futtat, és üzembe helyez egy átmeneti munkaterületen integrációs tesztelés céljából.
  • Az MLOps mérnökei áttekintik az érvényesítési metrikákat, és az MLflow registry használatával előléptetik az ellenőrzött modelleket az éles környezetbe.

A megvalósítás részleteiért lásd:

A csapatok szabványosított csomagokhoz és MLOps Stackekhez való igazításával a szervezetek egyszerűsíthetik az együttműködést, miközben az ml-életciklus során megőrzik a naplózási lehetőségeket.

CI/CD SQL-fejlesztőknek

A Databricks SQL-t használó SQL-fejlesztők streamelő táblák és materializált nézetek kezelésére használhatják a Git-integrációt és a CI/CD-folyamatokat a munkafolyamataik egyszerűsítése és a kiváló minőségű folyamatok fenntartása érdekében. A Lekérdezések Git-támogatásának bevezetésével az SQL-fejlesztők a lekérdezések írására összpontosíthatnak, miközben a Gitet a fájlok verziókövetésére .sql használják, ami lehetővé teszi az együttműködést és az automatizálást anélkül, hogy mély infrastruktúra-szakértelemre van szükség. Emellett az SQL-szerkesztő valós idejű együttműködést tesz lehetővé, és zökkenőmentesen integrálható a Git-munkafolyamatokkal.

SQL-központú munkafolyamatok esetén:

  • Verziókövetési SQL-fájlok

    • .sql fájlokat a Git-adattárakban tárolhatja Databricks Git-mappák vagy külső Git-szolgáltatók, például GitHub, Azure DevOps használatával.
    • Használjon ágakat (például fejlesztést, előkészítést, éles üzemet) a környezetspecifikus változások kezeléséhez.
  • A .sql fájlok integrálása CI/CD-pipeline-okba az üzembe helyezés automatizálásához:

    • Szintaxis- és sémaváltozások ellenőrzése lekéréses kérelmek során.
    • Fájlok üzembe helyezése .sql Databricks SQL-munkafolyamatokban vagy -feladatokban.
  • Paraméterezés a környezetelkülönítéshez

    • A fájlok változóinak .sql használatával dinamikusan hivatkozhat környezetspecifikus erőforrásokra, például adatelérési utakra vagy táblanevekre:

      CREATE OR REFRESH STREAMING TABLE ${env}_sales_ingest AS SELECT * FROM read_files('s3://${env}-sales-data')
      
  • Frissítések ütemezése és figyelése

    • Használja a SQL feladatokat egy Databricks feladatban a táblák és materializált nézetek frissítéseinek ütemezésére (REFRESH MATERIALIZED VIEW view_name).
    • Frissítési előzmények figyelése rendszertáblák használatával.

A munkafolyamatok a következőek lehetnek:

  1. Fejlesztés: Szkriptek írása és tesztelése .sql helyileg vagy a Databricks SQL-szerkesztőben, majd véglegesítés egy Git-ágban.
  2. Ellenőrzés: Lekéréses kérelem során ellenőrizze a szintaxist és a sémakompatibilitást automatizált CI-ellenőrzésekkel.
  3. Üzembe helyezés: Egyesítéskor helyezze üzembe a .sql szkripteket a célkörnyezetben CI/CD-folyamatok, például GitHub Actions vagy Azure Pipelines használatával.
  4. Monitorozás: A Databricks-irányítópultok és -riasztások használatával nyomon követheti a lekérdezések teljesítményét és az adatok frissességét.

CI/CD irányítópult-fejlesztőknek

A Databricks támogatja az irányítópultok CI/CD-munkafolyamatokba való integrálását deklaratív automatizálási csomagok használatával. Ez a funkció lehetővé teszi az irányítópult-fejlesztők számára a következőket:

  • Verziókövetési irányítópultok, amelyek biztosítják az auditálást és leegyszerűsítik a csapatok közötti együttműködést.
  • Automatizálja az irányítópultok telepítéseit a feladatok és folyamatok mellett az egyes környezeteken, az elejétől a végéig tartó összhang érdekében.
  • Csökkentse a manuális hibákat, és győződjön meg arról, hogy a frissítések következetesen alkalmazhatók a környezetekben.
  • Magas színvonalú elemzési munkafolyamatok fenntartása a CI/CD ajánlott eljárásainak betartása mellett.

Ci/CD-irányítópultok esetén:

  • Használja a parancsot a databricks bundle generate meglévő irányítópultok JSON-fájlokként való exportálásához, és hozza létre a csomagot tartalmazó YAML-konfigurációt:

    resources:
      dashboards:
        sales_dashboard:
          display_name: 'Sales Dashboard'
          file_path: ./dashboards/sales_dashboard.lvdash.json
          warehouse_id: ${var.warehouse_id}
    
  • Ezeket a .lvdash.json fájlokat Git-adattárakban tárolhatja a változások nyomon követéséhez és a hatékony együttműködéshez.

  • Irányítópultok automatikus üzembe helyezése CI/CD-folyamatokban a(z) databricks bundle deploy segítségével. Például a GitHub Actions üzembe helyezési lépése:

    name: Deploy Dashboard
      run: databricks bundle deploy --target=prod
    env:
      DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
    
  • Változók használatával például ${var.warehouse_id}paraméterezheti az olyan konfigurációkat, mint az SQL-raktárak vagy az adatforrások, biztosítva a zökkenőmentes üzembe helyezést a fejlesztői, előkészítési és éles környezetekben.

  • A lehetőséggel folyamatosan szinkronizálhatja a bundle generate --watch helyi irányítópult JSON-fájljait a Databricks felhasználói felületén végrehajtott módosításokkal. Ha eltérések lépnek fel, az üzembe helyezés során használja a --force jelzőt a távoli irányítópultok helyi verziókkal való felülírásához.

A csomagokban lévő irányítópultokkal kapcsolatos információkért tekintse meg az irányítópult-erőforrást. A csomagparancsokkal kapcsolatos részletekért tekintse meg bundle a parancscsoportot.