3
マスター・ノード上のJavaヒープがゆっくりと枯渇する問題が発生しています。以下は私が作成した簡単な例です。これは200回繰り返します。スパーク・ドライバ・ヒープ・メモリーの問題
16/12/15 17:55:46 INFO YarnSchedulerBackend$YarnDriverEndpoint: Launching task 97578 on executor id: 9 hostname: ip-xxx-xxx-xx-xx
#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
# Executing /bin/sh -c "kill -9 20160"...
コード::私はM4を使用してAWS EMR-5.1.0上で実行しているよ
import org.apache.spark.sql.functions._
import org.apache.spark._
object MemTest {
case class X(colval: Long, colname: Long, ID: Long)
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("MemTest")
val spark = new SparkContext(conf)
val sc = org.apache.spark.sql.SQLContext.getOrCreate(spark)
import sc.implicits._;
for(a <- 1 to 200)
{
var df = spark.parallelize((1 to 5000000).map(x => X(x.toLong, x.toLong % 10, x.toLong/10))).toDF()
df = df.groupBy("ID").pivot("colname").agg(max("colval"))
df.count
}
spark.stop()
}
}
次のエラーで約1時間のメモリのうちマスターラン以下の設定で。 xlarge(4ノード+1マスター)。ここで
{
"Classification": "spark-defaults",
"Properties": {
"spark.dynamicAllocation.enabled": "false",
"spark.executor.instances": "16",
"spark.executor.memory": "2560m",
"spark.driver.memory": "768m",
"spark.executor.cores": "1"
}
},
{
"Classification": "spark",
"Properties": {
"maximizeResourceAllocation": "false"
}
},
私は
name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.0.2" % "provided",
"org.apache.spark" %% "spark-sql" % "2.0.2")
を使用してSBTを指定してコンパイルしてから、私はjava.lang.Long
とscala.Tuple2
が成長し続ける見るjmap -histo
でメモリを見てみると
spark-submit --class MemTest target/scala-2.11/simple-project_2.11-1.0.jar
使用してそれを実行して、私の火花の設定があります。
それが何EMR-5.1.0ですので、それはスパーク2.0.1です。 emr-5.2.0を試してみます。 –
スパーク2.0.2との違いはありません –