Az éles működés megfontolandó szempontjai a strukturált streamelés kapcsán
Ez a cikk javaslatokat tartalmaz a strukturált streamelési számítási feladatok Azure Databricks-feladatok használatával történő ütemezéséhez.
A Databricks mindig a következőket javasolja:
- Távolítsa el a szükségtelen kódot a jegyzetfüzetekből, amelyek eredményeket adnak vissza, például
display
éscount
. - Ne futtasson strukturált streamelési számítási feladatokat teljes körű számítással. A streameket mindig feladatként ütemezze a feladatok számításával.
- Feladatok ütemezése mód használatával
Continuous
. - Ne engedélyezze az automatikus skálázást a strukturált streamelési feladatok számításához.
Egyes számítási feladatok a következőkből profitálnak:
- A RocksDB állapottároló konfigurálása az Azure Databricksben
- Állapotalapú lekérdezések aszinkron állapot-ellenőrzőpontja
- Mi az aszinkron folyamatkövetés?
Az Azure Databricks bevezette a Delta Live Tableset, hogy csökkentse a strukturált streamelési számítási feladatok éles infrastruktúrájának kezelésének összetettségét. A Databricks a Delta Live Tables használatát javasolja az új strukturált streamelési folyamatokhoz. Lásd : Mi az a Delta Live Tables?.
Feljegyzés
A számítási automatikus skálázás korlátozásokkal rendelkezik a strukturált streamelési számítási feladatok fürtméretének leskálázásával. A Databricks a Delta Live Tables with Enhanced Autoscaling használatát ajánlja a streaming munkaterhelésekhez. Lásd: Delta Live Tables-folyamatok fürtkihasználtságának optimalizálása továbbfejlesztett automatikus skálázással.
Streamelési számítási feladatok megtervezése a hibákra való várakozáshoz
A Databricks azt javasolja, hogy mindig konfigurálja a streamelési feladatokat a hibák automatikus újraindításához. Egyes funkciók, beleértve a sémafejlődést, feltételezik, hogy a strukturált streamelési számítási feladatok automatikus újrapróbálkozására vannak konfigurálva. Lásd: Strukturált streamelési feladatok konfigurálása a streamelési lekérdezések sikertelen újraindításához.
Egyes műveletek, például foreachBatch
a pontos garancia helyett legalább egyszer nyújtanak garanciát. Ezekben a műveletekben azt kell tennie, hogy a feldolgozási folyamat idempotens. Lásd: A foreachBatch használata tetszőleges adatelnyelőkbe való íráshoz című témakört.
Feljegyzés
Amikor egy lekérdezés újraindul, az előző futtatási folyamatok során tervezett mikro köteg. Ha a feladat memóriahiba miatt meghiúsult, vagy egy túlméretezett mikroköteg miatt manuálisan megszakított egy feladatot, előfordulhat, hogy fel kell skáláznia a számítást a mikro köteg sikeres feldolgozásához.
Ha a futtatások közötti konfigurációkat módosítja, ezek a konfigurációk az első tervezett új kötegre vonatkoznak. Lásd: Helyreállítás strukturált streamelési lekérdezés módosításai után.
Mikor próbálkozik újra egy feladat?
Egy Azure Databricks-feladat részeként több feladatot is ütemezhet. Ha egy feladatot a folyamatos eseményindítóval konfigurál, nem állíthat be függőségeket a tevékenységek között.
Az alábbi módszerek egyikével több streamet ütemezhet egy feladatba:
- Több tevékenység: Több feladattal rendelkező feladat definiálása, amely folyamatos eseményindítóval futtat streamelési számítási feladatokat.
- Több lekérdezés: Több streamelési lekérdezés definiálása egyetlen tevékenység forráskódjában.
Ezeket a stratégiákat kombinálhatja is. Az alábbi táblázat ezeket a megközelítéseket hasonlítja össze.
Több feladat | Több lekérdezés | |
---|---|---|
Hogyan osztják meg a számítást? | A Databricks azt javasolja, hogy az egyes streamelési feladatokhoz megfelelő méretű számítási feladatokat helyezzen üzembe. Igény szerint megoszthatja a számítást a tevékenységek között. | Minden lekérdezés ugyanazt a számítást használja. Igény szerint lekérdezéseket rendelhet az ütemezőkészletekhez. |
Hogyan kezelik az újrapróbálkozásokat? | A feladat újrapróbálkozása előtt minden tevékenységnek sikertelennek kell lennie. | A feladat újrapróbálkozza, ha valamelyik lekérdezés meghiúsul. |
Strukturált streamelési feladatok konfigurálása a streamelési lekérdezések sikertelen újraindításához
A Databricks azt javasolja, hogy a folyamatos eseményindítóval konfigurálja az összes streamelési számítási feladatot. Tekintse meg a feladatok folyamatos futtatása című témakört.
A folyamatos eseményindító alapértelmezés szerint a következő viselkedést biztosítja:
- A feladat több egyidejű futtatását is megakadályozza.
- Új futtatás indítása, ha egy korábbi futtatás meghiúsul.
- Exponenciális visszalépést használ az újrapróbálkozáshoz.
A Databricks azt javasolja, hogy a munkafolyamatok ütemezése során mindig a feladatok számítását használja a teljes körű számítás helyett. Feladathiba és újrapróbálkozás esetén új számítási erőforrások telepítenek.
Feljegyzés
Nem kell használnia streamingQuery.awaitTermination()
vagy spark.streams.awaitAnyTermination()
. A feladatok automatikusan megakadályozzák a futtatás végrehajtását, ha egy streamelési lekérdezés aktív.
Ütemezőkészletek használata több streamelési lekérdezéshez
Az ütemezési készleteket úgy konfigurálhatja, hogy számítási kapacitást rendeljenek a lekérdezésekhez, ha ugyanazon forráskódból több streamelési lekérdezést futtat.
Alapértelmezés szerint az összes lekérdezés ugyanabban a tisztességes ütemezési készletben fut egy jegyzetfüzetben. A jegyzetfüzetben lévő összes streamlekérdezés eseményindítói által létrehozott Apache Spark-feladatok egymás után futnak "first in, first out" (FIFO) sorrendben. Ez szükségtelen késéseket okozhat a lekérdezésekben, mert nem hatékonyan osztják meg a fürt erőforrásait.
A Scheduler-készletek lehetővé teszik annak deklarálásához, hogy mely strukturált streamelési lekérdezések osztanak meg számítási erőforrásokat.
Az alábbi példa egy dedikált készlethez rendel hozzá query1
egy ütemezőkészletet, és query2
query3
megoszt egy ütemezőkészletet.
# Run streaming query1 in scheduler pool1
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool1")
df.writeStream.queryName("query1").toTable("table1")
# Run streaming query2 in scheduler pool2
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query2").toTable("table2")
# Run streaming query3 in scheduler pool2
spark.sparkContext.setLocalProperty("spark.scheduler.pool", "pool2")
df.writeStream.queryName("query3").toTable("table3")
Feljegyzés
A helyi tulajdonság konfigurációjának ugyanabban a jegyzetfüzetcellában kell lennie, ahol a streamelési lekérdezést elindítja.
További részletekért tekintse meg az Apache fair scheduler dokumentációját .