8 Performance Optimization Techniques Using Spark

stel dat je een situatie hebt waarin één dataset erg klein is en een andere dataset vrij groot, en je de join operatie tussen deze twee wilt uitvoeren. In dat geval moeten we gaan voor de uitzending join, zodat de kleine dataset kan passen in uw uitzending variabele. De syntaxis om de broadcast variabele te gebruiken is df1.join(broadcast(DF2)). Hier hebben we een tweede dataframe dat erg klein is en we houden dit dataframe als een broadcast variabele.

Code:

val broadcastVar = sc.broadcast (Array)(1, 2, 3))

broadcastVar.waarde

res0: Array = Array(1, 2, 3)

val accum = sc.longAccumulator (“mijn Accumulator”)

sc.parallelize (Array(1, 2, 3, 4)).foreach (x => accum.add(x))

accum.waarde

res2: Long = 10

Cache en Persist

  • Spark biedt zijn eigen cachingmechanismen zoals persist () en cache().
  • cache () en persist () slaan de dataset in het geheugen op.
  • wanneer u een kleine dataset hebt die meerdere keren in uw programma moet worden gebruikt, cachen we die dataset.
  • Cache() – Always in Memory
  • Persist () – Memory and disks

Spark biedt zijn eigen caching mechanisme zoals Persist en Caching. Persist and Cache mechanisms zal de dataset opslaan in het geheugen wanneer er behoefte is, waar u een kleine dataset hebt en die dataset meerdere keren wordt gebruikt in uw programma. Als we RDD toepassen.Cache () het zal altijd de gegevens op te slaan in het geheugen, en als we RDD toepassen.Persist () dan kan een deel van gegevens in het geheugen worden opgeslagen wat op de schijf kan worden opgeslagen.

5. ByKey-bewerking

  • Shuffles zijn zware bewerkingen die veel geheugen verbruiken.
  • tijdens het coderen in Spark, moet de gebruiker altijd proberen shuffle-bewerking te vermijden.
  • hoog schuifelen kan aanleiding geven tot een fout in het geheugen; om een dergelijke fout te voorkomen, kan de gebruiker het niveau van parallellisme verhogen.
  • gebruik reduceByKey in plaats van groupByKey.
  • Partitioneer de gegevens correct.

zoals we weten tijdens onze transformatie van Spark hebben we veel ByKey operaties. ByKey operaties genereren veel shuffle. Shuffles zijn zware operatie omdat ze verbruiken veel geheugen. Tijdens het coderen in Spark, een gebruiker moet altijd proberen om elke shuffle operatie te vermijden, omdat de shuffle operatie de prestaties zal degraderen. Als er een hoge schuifeling is, kan een gebruiker de fout uit het geheugen halen. In dit geval, om die fout te voorkomen, moet een gebruiker het niveau van parallellisme verhogen. In plaats van groupBy, een gebruiker moet gaan voor de reduceByKey omdat groupByKey creëert veel schuifelen die de prestaties belemmert, terwijl reduceByKey niet schuifelen de gegevens zo veel. Daarom, reduceByKey is sneller in vergelijking met groupByKey. Wanneer om het even welke bykey verrichting wordt gebruikt, zou de gebruiker de gegevens correct moeten verdelen.

6. Bestandsselectie

  • Spark ondersteunt vele formaten, zoals CSV, JSON, XML, PARQUET, ORC, AVRO, enz.
  • Spark-taken kunnen worden geoptimaliseerd door te kiezen voor het parket-bestand met pittige compressie die de hoge prestaties en de beste analyse geeft.
  • Parquet-bestand is inheems in Spark, dat de metadata samen met de voettekst draagt.

Spark wordt geleverd met vele bestandsformaten zoals CSV, JSON, XML, PARQUET, ORC, AVRO en meer. Een Spark baan kan worden geoptimaliseerd door te kiezen voor het parket bestand met pittige compressie. Parket bestand is native to Spark die de metadata dragen samen met de voettekst zoals we weten parket bestand is native to spark die in het binaire formaat en samen met de gegevens het ook dragen de voettekst het draagt ook de metadata en de voettekst dus wanneer u een parket bestand te maken, zult u zien .metagegevensbestand op dezelfde map samen met het gegevensbestand.

Code:

val peopleDF = spark.lezen.JSON (“examples / src / main / resources / people.json”)

personenschrijven.parket (“mensen.parket”)

val parquetFileDF = spark.lezen.parket (“mensen.parket”)

val usersDF = spark.lezen.formaat (“avro”).load (“examples/src / main / resources / users.avro”)

usersDF.selecteer(“name”, “favorite_color”).schrijven.formaat (“avro”).opslaan (“namesAndFavColors.avro”)

Garbage Collection Tuning

  • JVM garbage collection kan een probleem zijn wanneer u een grote verzameling ongebruikte objecten hebt.
  • de eerste stap in GC tuning is het verzamelen van statistieken door-verbose te kiezen tijdens het indienen van vonk-taken.
  • in een ideale situatie proberen we GC overheadkosten < 10% van het heapgeheugen te behouden.

zoals we weten draait onze Spark-taak op het JVM-platform, dus JVM garbage collection kan een probleem zijn wanneer u een grote collectie van een ongebruikt object hebt.de eerste stap in het afstemmen van garbage collection is het verzamelen van statica door de optie in uw Spark submit uitgebreid te kiezen. In het algemeen, in een ideale situatie moeten we onze garbage collection geheugen minder dan 10% van heap geheugen te houden.

8. Het parallellisme speelt een zeer belangrijke rol bij het afstemmen van vonk-taken.

  • elke partitie ~ taak vereist een enkele core voor het verwerken.
  • er zijn twee manieren om het parallellisme te behouden:
    • verdeling: geeft gelijk aantal partities met hoge shuffling
    • samenvoeging: over het algemeen vermindert het aantal partities met minder shuffling.
  • in elke gedistribueerde omgeving speelt parallellisme een zeer belangrijke rol tijdens het afstemmen van uw vonk Baan. Wanneer een vonk taak wordt ingediend, het creëert het bureau dat fasen zal bevatten, en de taken zijn afhankelijk van partitie, zodat elke partitie of taak vereist een enkele kern van het systeem voor de verwerking. Er zijn twee manieren om het parallellisme te handhaven – verdeling en samenvoeging. Wanneer u de Repartition methode toe te passen geeft het je gelijk aantal partities, maar het zal veel schudden dus het is niet raadzaam om te gaan voor Repartition wanneer u alle gegevens wilt slaan. Coalesce zal over het algemeen het aantal partities verminderen en zorgt voor minder schuifelen van gegevens.

    deze factoren voor vonkoptimalisatie, indien correct gebruikt, kunnen –



    +