Spark Ausnahme beim Konvertieren einer MySQL-Tabelle in Parkett
Ich versuche, eine MySQL-entfernte Tabelle mit spark 1.6.2 in eine Parkettdatei zu konvertieren.
Der Vorgang dauert 10 Minuten und füllt den Speicher. Anschließend werden die folgenden Meldungen ausgegeben:
WARN NettyRpcEndpointRef: Error sending message [message = Heartbeat(driver,[Lscala.Tuple2;@dac44da,BlockManagerId(driver, localhost, 46158))] in 1 attempts
org.apache.spark.rpc.RpcTimeoutException: Futures timed out after [10 seconds]. This timeout is controlled by spark.executor.heartbeatInterval
Am Ende schlägt dieser Fehler fehl:
ERROR ActorSystemImpl: Uncaught fatal error from thread [sparkDriverActorSystem-scheduler-1] shutting down ActorSystem [sparkDriverActorSystem]
java.lang.OutOfMemoryError: GC overhead limit exceeded
Ich führe es mit den folgenden Befehlen in einer Spark-Shell aus:
spark-shell --packages mysql:mysql-connector-java:5.1.26 org.slf4j:slf4j-simple:1.7.21 --driver-memory 12G
val dataframe_mysql = sqlContext.read.format("jdbc").option("url", "jdbc:mysql://.../table").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "...").option("user", "...").option("password", "...").load()
dataframe_mysql.saveAsParquetFile("name.parquet")
Ich habe Grenzen für den maximalen Executor-Speicher auf 12 GB. Gibt es eine Möglichkeit, das Schreiben der Parkettdatei in "kleinen" Blöcken zu erzwingen, um Speicher freizugeben?