估计Scala Spark作业所需的内存

时间:2015-02-12 14:05:06

标签: scala apache-spark

我试图发现Spark工作需要多少内存。

当我开始工作时,我收到异常:

15/02/12 12:01:08 INFO rdd.HadoopRDD: Input split: file:/c:/data/example.txt:20661+20661
15/02/12 12:01:08 INFO rdd.HadoopRDD: Input split: file:/c:/data/example.txt:61983+20661
15/02/12 12:01:09 INFO rdd.HadoopRDD: Input split: file:/c:/data/example.txt:0+20661
15/02/12 12:01:09 INFO rdd.HadoopRDD: Input split: file:/c:/data/example.txt:61983+20661
15/02/12 12:01:09 INFO rdd.HadoopRDD: Input split: file:/c:/data/example.txt:41322+20661
15/02/12 12:01:09 INFO rdd.HadoopRDD: Input split: file:/c:/data/example.txt:20661+20661
15/02/12 12:01:11 ERROR executor.Executor: Exception in task 2.0 in stage 0.0 (TID 2)
java.lang.OutOfMemoryError: Java heap space

更多消息" 15/02/12 12:01:08 INFO rdd.HadoopRDD:输入拆分:文件:/ c:/data/example.txt:20661 + 20661" 打印出来,只是为了简洁而将它们截掉。

我记录了计算结果,经过大约1&000;' 000计算后,我收到了以上异常。

完成工作所需的计算次数为64&000;' 000

目前我使用的是2GB内存,这是否意味着在内存中运行此作业而不需要进一步更改代码 2GB * 64 = 128GB或者这是一种预测所需内存的过于简单的方法吗?

每个拆分文件如何" 15/02/12 12:01:09 INFO rdd.HadoopRDD:输入拆分:文件:/ c:/data/example.txt:20661 + 20661"生成?这些不会添加到文件系统中作为"文件:/ c:/data/example.txt:20661 + 20661"在本地机器上不存在?

1 个答案:

答案 0 :(得分:0)

估计我使用此方法所需的内存量:

按照http://code.google.com/p/memory-measurer/

所述使用Calculate size of Object in Java

一旦安装程序可以使用下面的代码来估计Scala集合的大小,反过来这将通过Spark应用程序提供所需内存的指示:

object ObjectSizeDriver extends Application {

  val toMeasure = List(1,2,3,4,5,6);

  println(ObjectGraphMeasurer.measure(toMeasure));
  println(MemoryMeasurer.measureBytes(toMeasure));

}