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


Adattárolás optimalizálása az Apache Sparkhoz

Ez a cikk az Adattárolás optimalizálására szolgáló stratégiákat ismerteti az Azure HDInsight hatékony Apache Spark-feladatvégrehajtásához.

Áttekintés

A Spark számos formátumot támogat, például csv, json, xml, parquet, orc és avro. A Spark kiterjeszthető, hogy még sok más formátumot is támogatjon külső adatforrásokkal – további információt az Apache Spark-csomagok című témakörben talál.

A teljesítmény szempontjából a legjobb formátum a parquet beépülő modul tömörítése, amely a Spark 2.x alapértelmezett formátuma. A Parquet oszlopos formátumban tárolja az adatokat, és a Sparkban rendkívül optimalizált.

Adat absztrakció kiválasztása

A korábbi Spark-verziók RDD-k használatával absztrakciós adatokat, a Spark 1.3-at és az 1.6-os verzióban bevezetett DataFrame-eket és adatkészleteket használnak. Vegye figyelembe a következő relatív érdemeket:

  • Adatkeretek
    • A legjobb választás a legtöbb helyzetben.
    • A Catalyst használatával biztosítja a lekérdezésoptimalizálást.
    • Teljes körű kódlétrehozás.
    • Közvetlen memória-hozzáférés.
    • Alacsony szemétgyűjtési (GC) többletterhelés.
    • Nem olyan fejlesztőbarát, mint az Adathalmazok, mivel nincs fordítási idő ellenőrzése vagy tartományi objektum programozása.
  • Adatkészletek
    • Olyan összetett ETL-folyamatokban jó, ahol a teljesítményre gyakorolt hatás elfogadható.
    • Nem jó az olyan összesítésekben, ahol a teljesítményre gyakorolt hatás jelentős lehet.
    • A Catalyst használatával biztosítja a lekérdezésoptimalizálást.
    • Fejlesztőbarát a tartományi objektumok programozásával és a fordítási idő ellenőrzésével.
    • Szerializálási/deszerializálási többletterhelés hozzáadása.
    • Magas GC-többletterhelés.
    • Megszakítja a teljes fázisú kódgenerálást.
  • RDD-k
    • Nem kell RDD-ket használnia, kivéve, ha új egyéni RDD-t kell létrehoznia.
    • Nincs lekérdezésoptimalizálás a Catalyst használatával.
    • Nincs teljes fázisú kódgenerálás.
    • Magas GC-többletterhelés.
    • Spark 1.x örökölt API-kat kell használnia.

Alapértelmezett tároló kiválasztása

Új Spark-fürt létrehozásakor kiválaszthatja Azure Blob Storage vagy Azure Data Lake Storage a fürt alapértelmezett tárolójaként. Mindkét lehetőség biztosítja az átmeneti fürtök hosszú távú tárolásának előnyeit. Így az adatok nem törlődnek automatikusan a fürt törlésekor. Újra létrehozhat egy átmeneti fürtöt, és továbbra is hozzáférhet az adatokhoz.

Áruház típusa Fájlrendszer Sebesség Átmeneti Használati esetek
Azure Blob Storage wasb://url/ Standard Yes Átmeneti fürt
Azure Blob Storage (biztonságos) wasbs://url/ Standard Yes Átmeneti fürt
Azure Data Lake Storage Gen 2 abfs://url/ Gyorsabb Yes Átmeneti fürt
Azure Data Lake Storage Gen 1 adl://url/ Gyorsabb Yes Átmeneti fürt
Helyi HDFS hdfs://url/ Leggyorsabb No Interaktív 24/7-fürt

A tárolási lehetőségek teljes leírását az Azure HDInsight-fürtökkel használható tárolási lehetőségek összehasonlítása című cikkben tekinti meg.

Gyorsítótár használata

A Spark saját natív gyorsítótárazási mechanizmusokat biztosít, amelyek különböző módszerekkel használhatók, például .persist(), .cache()és CACHE TABLE. Ez a natív gyorsítótárazás kis adatkészletekben és ETL-folyamatokban hatékony, ahol a köztes eredményeket gyorsítótárazza. A Spark natív gyorsítótárazása azonban jelenleg nem működik jól a particionálással, mivel a gyorsítótárazott táblák nem őrzik meg a particionálási adatokat. Általánosabb és megbízhatóbb gyorsítótárazási technika a tárolási réteg gyorsítótárazása.

  • Natív Spark-gyorsítótárazás (nem ajánlott)

    • Kis adathalmazokhoz jó.
    • Nem működik particionálással, ami a későbbi Spark-kiadásokban változhat.
  • Tárterületszintű gyorsítótárazás (ajánlott)

    • A HDInsighton az IO Cache funkcióval valósítható meg.
    • Memórián belüli és SSD-gyorsítótárazást használ.
  • Helyi HDFS (ajánlott)

    • hdfs://mycluster Elérési út.
    • SSD-gyorsítótárazást használ.
    • A gyorsítótárazott adatok elvesznek a fürt törlésekor, ami gyorsítótár-újraépítést igényel.

Az adatszerializálás optimalizálása

A Spark-feladatok elosztottak, így a legjobb teljesítmény érdekében fontos a megfelelő adat szerializálás. A Sparkhoz két szerializálási lehetőség érhető el:

  • A Java-szerializálás az alapértelmezett beállítás.
  • Kryo A szerializálás egy újabb formátum, amely gyorsabb és kompaktabb szerializálást eredményezhet, mint a Java. Kryo megköveteli, hogy regisztrálja az osztályokat a programban, és még nem támogatja az összes szerializálható típust.

Gyűjtés használata

A gyűjtőzés hasonló az adatparticionáláshoz. Az egyes gyűjtők azonban nem csak egy oszlopértéket tartalmazhatnak. Ez a módszer jól használható nagy (több millió vagy több) érték, például termékazonosítók particionálására. A gyűjtők meghatározása a sor gyűjtőkulcsának kivonatolásával történik. A gyűjtőtáblák egyedi optimalizálásokat kínálnak, mivel metaadatokat tárolnak arról, hogyan lettek gyűjtve és rendezve.

Néhány speciális gyűjtőfunkció:

  • Lekérdezésoptimalizálás a metaadatok gyűjtőbe gyűjtése alapján.
  • Optimalizált összesítések.
  • Optimalizált illesztések.

Egyidejűleg particionálást és gyűjtőmunkát is használhat.

Következő lépések