Megosztás a következőn keresztül:


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:

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.

A feladat késését mutató grafikon

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.

Szakasz késését mutató grafikon

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 fürt átviteli sebességét megjelenítő grafikon

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.

Gráf a feladat végrehajtásának gazdagépenkénti összegével

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.

A feladatokat végrehajtónként ábrázoló diagram

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.

Szakaszonkénti tevékenységmetrikákat megjelenítő grafikon

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.

Gráf, amely azt mutatja, hogy a partíciók számának csökkentése csökkentette az ütemező késleltetési idejét.

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.

Streamelési átviteli sebességet megjelenítő grafikon

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.

Vizualizációk, amelyek bemutatják, hogy ezek a metrikák mennyiben 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:

  1. 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.

  2. 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.

  3. 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ó:

Gráf, amely azt mutatja, hogy az első két végrehajtón való keverés által használt memória 90x nagyobb, mint a többi végrehajtó.

Következő lépések