Ich benutze Pyspark, um eine größere csv auf einem Low-End-Maschine zu aggregieren und zu gruppieren; 4 GB RAM und 2 CPU-Core. Dies wird gemacht, um die Speichergrenzen für den Prototyp zu überprüfen. Nach der Aggregation muss ich die RDD in Cassandra speichern, die auf einem anderen Rechner läuft.Spark: PySpark Langsamkeit, Speicherproblem beim Schreiben an Cassandra
Ich benutze Datastax Cassandra-Python-Treiber. Zuerst verwendete ich rdd.toLocalIterator
und durchlief die RDD und verwendete die Treiber synchrone API session.execute
. Ich schaffte es, etwa 100.000 Datensätze in 5 Metern zu schreiben - sehr langsam. Checking this I wie hier python driver cpu bound gefunden erklärt, dass, wenn nload nw Monitor im Cassandra Knoten ausgeführt wird, werden die Daten vom Python-Treiber löschte ist mit einer sehr langsamen Geschwindigkeit, wodurch die Langsamkeit
Also habe ich versucht session.execute_async
und ich konnte sehen, die NW-Übertragung mit sehr hoher Geschwindigkeit und die Einführungszeit war auch sehr schnell.
Dies wäre eine glückliche Geschichte gewesen, die Tatsache aber, dass mit session.execute_async, ich laufe jetzt Speicher aus, während auf ein paar mehr Tabellen (mit verschiedenen Primärschlüssel) wird
Da rdd.toLocalIterator
Einsetzen des Um Speicher zu benötigen, der einer Partition gleich ist, habe ich den Schreibvorgang mit rdd.foreachPartition(x)
auf Spark worker verschoben, aber immer noch nicht genügend Arbeitsspeicher.
Ich bezweifle, dass es nicht die rdd Iteration ist, die dies verursacht, aber die schnelle Serialisierung? von execute_async des Python-Treibers (mit Cython)
Natürlich kann ich auf einen größeren RAM-Knoten verschieben und versuchen; aber es wäre schön, dieses Problem in diesem Knoten zu lösen; vielleicht wird als nächstes auch Multiprocessing versuchen; aber wenn es bessere Vorschläge sind bitte antworten
der Speicherfehler ich von JVM bin immer ist/oder OS OutOfMemory,
6/05/27 05:58:45 INFO MapOutputTrackerMaster: Size of output statuses for
shuffle 0 is 183 bytes
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007fdea10cc000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 12288 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/ec2-user/hs_err_pid3208.log