Teljesítménybeli szűk keresztmetszetek elhárítása az Azure Databricksben
Feljegyzés
Ez a cikk a GitHubon üzemeltetett nyílt forráskód könyvtárra támaszkodik: https://github.com/mspnp/spark-monitoring.
Az eredeti kódtár támogatja az Azure Databricks Runtimes 10.x (Spark 3.2.x) és korábbi verzióit.
A Databricks frissített verzióval támogatja az Azure Databricks Runtimes 11.0-s (Spark 3.3.x) és újabb verzióját a l4jv2
következő ágon: https://github.com/mspnp/spark-monitoring/tree/l4jv2.
Vegye figyelembe, hogy a 11.0-s kiadás nem kompatibilis visszamenőlegesen a Databricks Futtatókörnyezetekben használt különböző naplózási rendszerek miatt. Ügyeljen arra, hogy a Databricks Runtime-hoz megfelelő buildet használja. A tár és a GitHub-adattár karbantartási módban van. Nincsenek további kiadásokra vonatkozó tervek, és a problémák támogatása csak a legjobb munka lesz. Az Azure Databricks-környezetek monitorozásával és naplózásával kapcsolatos további kérdésekért forduljon azure-spark-monitoring-help@databricks.coma könyvtárhoz vagy az ütemtervhez.
Ez a cikk azt ismerteti, hogyan kereshet teljesítménybeli szűk keresztmetszeteket a Spark-feladatokban az Azure Databricks monitorozási irányítópultjaival.
Az Azure Databricks egy Apache Spark-alapú elemzési szolgáltatás, amely megkönnyíti a big data-elemzések gyors fejlesztését és üzembe helyezését. A teljesítményproblémák monitorozása és hibaelhárítása kritikus fontosságú az éles Azure Databricks számítási feladatainak üzemeltetése során. A gyakori teljesítményproblémák azonosításához hasznos a telemetriai adatokon alapuló monitorozási vizualizációk használata.
Előfeltételek
A cikkben látható Grafana-irányítópultok beállítása:
Konfigurálja a Databricks-fürtöt úgy, hogy telemetriát küldjön egy Log Analytics-munkaterületre az Azure Databricks monitorozási kódtárával. További részletekért tekintse meg a GitHub-olvasót.
Telepítse a Grafana-t egy virtuális gépen. További információ: Azure Databricks-metrikák megjelenítése irányítópultokkal.
Az üzembe helyezett Grafana-irányítópult idősoros vizualizációkat tartalmaz. Minden gráf egy Apache Spark-feladathoz, a feladat szakaszaihoz és az egyes fázisokat alkotó tevékenységekhez kapcsolódó metrikák idősoros ábrázolása.
Az Azure Databricks teljesítményének áttekintése
Az Azure Databricks az Apache Sparkon, egy általános célú elosztott számítástechnikai rendszeren alapul. A feladatként ismert alkalmazáskód egy Apache Spark-fürtön fut, amelyet a fürtkezelő koordinál. A feladatok általában a számítás legmagasabb szintű egységei. A feladat a Spark-alkalmazás által végrehajtott teljes műveletet jelöli. Egy tipikus művelet magában foglalja az adatok forrásból való beolvasását, az adatátalakítások alkalmazását, valamint az eredmények tárolási vagy más célhelyre történő írását.
A feladatok szakaszokra vannak bontva. A feladat egymás után halad végig a szakaszokon, ami azt jelenti, hogy a későbbi szakaszoknak várniuk kell a korábbi szakaszok befejezésére. A szakaszok azonos tevékenységek csoportjait tartalmazzák, amelyek párhuzamosan végrehajthatók a Spark-fürt több csomópontján. A feladatok a végrehajtás legrészletesebb egységei, amelyek az adatok egy részhalmazán történnek.
A következő szakaszok néhány olyan irányítópult-vizualizációt ismertetnek, amelyek hasznosak a teljesítmény hibaelhárításához.
Feladat és szakasz késése
A feladat késése a feladat végrehajtásának időtartama a kezdéstől a befejezésig. A feladatvégrehajtás percentiliseként jelenik meg fürtönként és alkalmazásazonosítónként, hogy lehetővé tegye a kiugró értékek vizualizációját. Az alábbi grafikon egy olyan feladatelőzményt mutat be, amelyben a 90. percentilis elérte az 50 másodpercet, annak ellenére, hogy az 50. percentilis következetesen 10 másodperc körül volt.
Vizsgálja meg a feladatok fürt és alkalmazás szerinti végrehajtását, és keresse meg a késési csúcsokat. A nagy késésű fürtök és alkalmazások azonosítása után folytassa a fáziskésés vizsgálatával.
A szakasz késése percentilisként is megjelenik, hogy lehetővé tegye a kiugró értékek vizualizációját. A szakasz késését a fürt, az alkalmazás és a szakasz neve bontja ki. Azonosítsa a gráf tevékenységkéséseinek csúcsait annak megállapításához, hogy mely tevékenységek tartják vissza a szakasz befejezését.
A fürt átviteli sebességének grafikonja a percenként elvégzett feladatok, szakaszok és tevékenységek számát mutatja. Ez segít megérteni a számítási feladatot a fázisok és tevékenységek feladatonkénti relatív száma szempontjából. Itt láthatja, hogy a feladatok száma percenként 2 és 6 között mozog, míg a szakaszok száma körülbelül 12–24 percenként.
A tevékenység végrehajtásának késése
Ez a vizualizáció a fürtön futó gazdagépenkénti feladatvégrehajtási késés összegét jeleníti meg. Ezzel a grafikonlal észlelheti azokat a feladatokat, amelyek lassan futnak, mert a gazdagép lelassul egy fürtön, vagy a feladatok végrehajtónkénti helytelen áthelyezése miatt. A következő grafikonon a gazdagépek többsége körülbelül 30 másodperces összeggel rendelkezik. Két gazdagépnek azonban vannak olyan összegei, amelyek körülbelül 10 percet mutatnak. A gazdagépek lassan futnak, vagy a végrehajtónkénti feladatok száma helytelenül van áthelyezve.
A végrehajtónkénti tevékenységek száma azt mutatja, hogy két végrehajtóhoz aránytalan számú feladat van rendelve, ami szűk keresztmetszetet okoz.
Tevékenységmetrikák fázisonként
A tevékenységmetrikák vizualizációja a tevékenységek végrehajtásának költséglebontását adja meg. Használhatja az olyan tevékenységekre fordított relatív időt, mint a szerializálás és a deszerializálás. Ezek az adatok optimalizálható lehetőségeket mutathatnak – például szórási változók használatával a szállítási adatok elkerülése érdekében. A tevékenységmetrikák egy tevékenységhez tartozó shuffle adatméretet, valamint az elegyítés olvasási és írási idejét is megjelenítik. Ha ezek az értékek magasak, az azt jelenti, hogy sok adat halad át a hálózaton.
Egy másik tevékenységmetrika az ütemező késése, amely azt méri, hogy mennyi ideig tart egy tevékenység ütemezése. Ideális esetben ennek az értéknek alacsonynak kell lennie a végrehajtó számítási idejéhez képest, ami a feladat tényleges végrehajtásával töltött idő.
Az alábbi grafikon egy ütemező késleltetési idejét (3,7 s) mutatja, amely meghaladja a végrehajtó számítási idejét (1,1 s). Ez azt jelenti, hogy több időt kell várni a tevékenységek ütemezésére, mint a tényleges munka elvégzésére.
Ebben az esetben a problémát a túl sok partíció okozta, ami sok többletterhelést okozott. A partíciók számának csökkentése csökkentette az ütemező késleltetési idejét. A következő grafikonon látható, hogy a legtöbb időt a feladat végrehajtásával töltik.
Streamelési átviteli sebesség és késés
A streamelési átviteli sebesség közvetlenül kapcsolódik a strukturált streameléshez. A streamelési átviteli sebességhez két fontos metrika tartozik: Bemeneti sorok másodpercenként és feldolgozott sorok másodpercenként. Ha a bemeneti sorok másodpercenként túllépik a feldolgozott sorokat, az azt jelenti, hogy a streamfeldolgozó rendszer lemarad. Ha a bemeneti adatok az Event Hubsból vagy a Kafkából származnak, akkor a másodpercenkénti bemeneti soroknak lépést kell tartaniuk az előtér adatbetöltési sebességével.
Két feladat rendelkezhet hasonló fürtteljesítménysel, de nagyon különböző streamelési metrikákkal. Az alábbi képernyőképen két különböző számítási feladat látható. A fürt átviteli sebessége (feladatok, szakaszok és tevékenységek percenként) tekintetében hasonlóak. A második futtatás azonban 12 000 sort/másodpercet és 4000 sort/másodpercet dolgoz fel.
A streamelési átviteli sebesség gyakran jobb üzleti mérőszám, mint a fürt átviteli sebessége, mivel a feldolgozott adatrekordok számát méri.
Erőforrás-felhasználás végrehajtónként
Ezek a metrikák segítenek megérteni az egyes végrehajtók által végzett munkát.
A százalékmetrikák azt mérik , hogy a végrehajtó mennyi időt tölt különböző dolgokra, és a teljes végrehajtói számítási idő arányában kifejezve. Ezek a metrikák a következők:
- Szerializálási idő %-a
- %Deszerializálási idő
- Processzor-végrehajtói idő %-a
- JVM-idő %-a
Ezek a vizualizációk azt mutatják be, hogy ezek a metrikák mekkora mértékben járulnak hozzá a végrehajtók általános feldolgozásához.
Az shuffle metrikák a végrehajtók közötti adatelkülönítéssel kapcsolatos metrikák.
- Shuffle I/O
- Memória shuffle
- Fájlrendszer-használat
- Lemezhasználat
Gyakori teljesítménybeli szűk keresztmetszetek
A Spark két gyakori teljesítménybeli szűk keresztmetszete a feladat-váltók és a nem optimális shuffle partíciók száma.
Tevékenység-váltók
A feladatok fázisait a rendszer egymást követően hajtja végre, a korábbi fázisok pedig blokkolják a későbbi fázisokat. Ha egy feladat lassabban hajt végre egy adatok újbóli elosztására szolgáló partícióra vonatkozó műveletet, mint a többi feladat, a fürtben lévő összes feladatnak meg kell várnia, amíg a lassú feladat felzárkózik, mielőtt a szakasz befejeződhet. Ez a következő okokból történhet:
A gazdagépek vagy gazdagépek csoportja lassan fut. Tünetek: Magas feladat-, fázis- vagy feladatkésés és alacsony fürtteljesítmény. A feladatok késéseinek összegzése gazdagépenként nem lesz egyenletesen elosztva. Az erőforrás-felhasználás azonban egyenletesen oszlik el a végrehajtók között.
A feladatok végrehajtása költséges aggregációval (adatelküldéssel) jár. Tünetek: Nagy feladatkésés, nagy fázisú késés, magas feladatkésés vagy alacsony fürtteljesítmény, de a késések gazdagépenként való összegzése egyenletesen oszlik el. Az erőforrás-felhasználás egyenletesen oszlik el a végrehajtók között.
Ha a partíciók mérete nem egyenlő, a nagyobb partíciók kiegyensúlyozatlan feladatvégrehajtást okozhatnak (partíciók leválasztása). Tünetek: A végrehajtó erőforrás-felhasználása magas a fürtön futó többi végrehajtóhoz képest. A végrehajtón futó összes tevékenység lassú lesz, és megtartja a fázisvégrehajtást a folyamatban. Ezeket a szakaszokat úgy mondják, hogy szakaszkorlátok.
Nem optimális shuffle partíciók száma
Strukturált streamelési lekérdezések során egy feladat végrehajtóhoz való hozzárendelése erőforrás-igényes művelet a fürt számára. Ha az elosztási adatok nem az optimális méret, a tevékenység késleltetése negatívan befolyásolja az átviteli sebességet és a késést. Ha túl kevés partíció van, a fürt magjai kihasználatlanok lesznek, ami a feldolgozási hatékonyságot eredményezheti. Ezzel szemben, ha túl sok partíció van, nagy a felügyeleti többletterhelés egy kis számú tevékenységhez.
Az erőforrás-használati metrikák használatával elháríthatja a fürtben lévő végrehajtók partíciók általi elmozdítását és helytelenül történő áthelyezését. Ha egy partíció el van varrva, a végrehajtói erőforrások emelt szintűek lesznek a fürtön futó többi végrehajtóhoz képest.
Az alábbi gráf például azt mutatja, hogy az első két végrehajtón való keverés által használt memória 90-szer nagyobb, mint a többi végrehajtó:
Következő lépések
- Az Azure Databricks monitorozása egy Azure Log Analytics-munkaterületen
- Képzési terv: Gépi tanulási megoldások létrehozása és üzemeltetése az Azure Databricks használatával
- Az Azure Databricks dokumentációja
- Azure Monitor – áttekintés
Kapcsolódó erőforrások
- Az Azure Databricks monitorozása
- Azure Databricks-alkalmazásnaplók küldése az Azure Monitornak
- Irányítópultok használata az Azure Databricks-metrikák megjelenítésére
- Modern elemzési architektúra az Azure Databricksszel
- Betöltési, ETL-alapú (kinyerési, átalakító, betöltési) és streamfeldolgozási folyamatok az Azure Databricks használatával