0

Ich habe eine EC2 eingerichtet mit r3.8xlarge (32 cores, 244G RAM).Spark: Master lokal [*] ist viel langsamer als Master lokal

In meiner Spark Anwendung, lese ich zwei CSV-Dateien aus S3Spark-CSV von databrick verwenden, hat jeder csv etwa 5 Millionen Zeilen. Ich bin unionAll die zwei DataFrames und läuft eine auf dem kombinierten DataFrame.

Aber als ich habe,

val conf = new SparkConf() 
      .setMaster("local[32]") 
      .setAppName("Raw Ingestion On Apache Spark") 
      .set("spark.sql.shuffle.partitions", "32") 

Spark ist langsamer als .setMaster("local")

Wäre es nicht mit 32 Kernen schneller?

Antwort

0

Nun Funke ist kein Windows-Betriebssystem, dass es von Anfang an mit der maximal möglichen Kapazität arbeiten würde, Sie müssen es für Ihre Verwendung einstellen.

Gerade jetzt haben Sie einfach gesagt, um Funken zu starten und meine Sachen auf einem Knoten mit 32 Kernen zu verarbeiten. Dafür ist Spark nicht gut. Es ist ein verteiltes System, das auf einem Cluster mit mehreren Knoten ausgeführt werden soll, wo es am besten funktioniert.

Grund ist einfach, auch wenn Sie 32-Core verwenden, was ist IO-Problem? Weil Sie jetzt verwenden, wenn es 30 Executoren ausgeführt hat, als das ist 32 Prozess lesen von der gleichen Festplatte.

Sie haben 32 Core angegeben, was ist mit Executor Memory? Hatten beide Maschinen den gleichen RAM, wo Sie getestet haben.

Sie haben jetzt speziell angegeben, dass Sie 32 Partitionen haben möchten, wenn die Daten sehr klein sind und viel Overhead ist. Im Idealfall sollten Sie die Partition nicht angeben, bevor Sie nicht genau wissen, was Sie tun, oder ob Sie sich wiederholende Aufgaben ausführen, und Sie wissen, dass die Daten immer genau gleich sind.

Wenn Sie es richtig tunen, wird Funke mit 32 Kern tatsächlich schneller arbeiten als "lokal", das im Grunde auf einem Kern läuft.

Verwandte Themen