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.