【发布时间】:2017-03-10 11:37:26
【问题描述】:
我正在尝试使用 spark 1.6.2 将 MySQL 远程表转换为 parquet 文件。
该进程运行 10 分钟,内存已满,然后以以下消息开始:
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
最后失败并出现此错误:
ERROR ActorSystemImpl: Uncaught fatal error from thread [sparkDriverActorSystem-scheduler-1] shutting down ActorSystem [sparkDriverActorSystem]
java.lang.OutOfMemoryError: GC overhead limit exceeded
我正在使用以下命令在 spark-shell 中运行它:
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")
我将最大执行程序内存限制为 12G。有没有办法强制将镶木地板文件写入“小”块以释放内存?
【问题讨论】:
-
您能否更具体地了解您的集群配置?
-
不幸的是它是独立的
-
你的数据有多大?任何分区列?
-
2600 万行,约 3GB 数据。没有分区
-
问题来了,没有分区!
标签: apache-spark apache-spark-sql parquet