估计所需的内存斯卡拉星火工作(Estimating required memory for Scal

2019-10-21 20:37发布

我试图找到多少内存将火花的工作是必需的。

当我运行的工作,我得到异常:

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或者这是预期所需的内存的太simpistic方法?

如何是各分割文件,例如 “12点01分09秒15/02/12 INFO rdd.HadoopRDD:输入分裂:文件:/ C:/data/example.txt:20661 + 20661” 而生成? 这些未添加到文件系统“文件:/ C:/data/example.txt:20661 + 20661”并不本地计算机上存在吗?

Answer 1:

为了估计我用这个方法所需的内存量:

使用http://code.google.com/p/memory-measurer/如描述: 在Java中计算对象的大小

一旦设置可以使用以下代码来估计反过来Scala中收集和尺寸,这将提供火花应用所需存储器的指示:

object ObjectSizeDriver extends Application {

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

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

}


文章来源: Estimating required memory for Scala Spark job