Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 映射器侧出理论_Java_Hadoop_Memory Management_Mapreduce_Heap - Fatal编程技术网

Java 映射器侧出理论

Java 映射器侧出理论,java,hadoop,memory-management,mapreduce,heap,Java,Hadoop,Memory Management,Mapreduce,Heap,在我的Mapper端清理方法中,我遇到了heap space OutOfMemory错误,我正在从inputStream读取数据,并使用IOUtils.tobyteArrayInputStream将其转换为字节数组 我知道我可以通过增加最大堆空间xmx来解决这个问题,但是我应该已经有足够的堆空间1GB了。我找到了下面关于调试近似空间值的信息 runtime.maxMemory() - 1024Mb runtime.totalMemory - 700Mb runtime.freeMemory -

在我的Mapper端清理方法中,我遇到了heap space OutOfMemory错误,我正在从inputStream读取数据,并使用IOUtils.tobyteArrayInputStream将其转换为字节数组

我知道我可以通过增加最大堆空间xmx来解决这个问题,但是我应该已经有足够的堆空间1GB了。我找到了下面关于调试近似空间值的信息

runtime.maxMemory() - 1024Mb
runtime.totalMemory - 700Mb
runtime.freeMemory - 200Mb
我的数据块大小是128MB,我不会在我的RecordReader上添加任何额外的数据。我从映射器输出的大小不会超过128 Mb。 我还看到了inputStream.available中的可用字节,它提供了大约128MB的值

我对JVM的内存分配也有点困惑。假设我将堆空间值设置为Xms-128m;Xmx-1024m。我的tasktracker有16Gb的RAM,并且已经有8jobs8JVM在该tasktracker中运行。让我们假设tasktracker只能为JVM分配8.5GB的RAM,其余部分将用于其内部用途。因此,我们有8.5Gb内存可用,8个任务正在运行,目前仅使用6Gb内存。是否可以将新任务分配给同一个任务跟踪器,因为已经有8个任务正在运行,这可能需要8Gb,在这种情况下,如果需要,新任务将无法提供用户请求的堆大小1GB


PS:我知道并不是所有堆都需要横冲直撞。我的主要问题是,在所有情况下,用户是否能够获得请求的最大堆大小?

查看一些映射程序会很有帮助code@ChrisGerken:抱歉耽搁了。我将最早分享代码片段。