我试图发现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"在本地机器上不存在?
答案 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));
}