Java Hadoop流式内存使用
我想知道内存在以下作业中的使用位置:Java Hadoop流式内存使用,java,memory,hadoop,mapreduce,Java,Memory,Hadoop,Mapreduce,我想知道内存在以下作业中的使用位置: Hadoop Mapper/Reducer堆大小:-Xmx2G 流式API: 映射器:/bin/cat 减速器:wc 输入文件是一个350兆字节的文件,包含一行a 这是我们遇到的实际问题的简化版本 从HDFS读取文件并构造Text-对象的堆大小不应超过700MB-假设Text也使用每个字符16位-我不确定这一点,但我可以想象Text只使用8位 所以有这些(最坏情况)700MB线路。该行应该至少能容纳堆中的2倍,但我总是遇到内存不足的错误 这是Hado
- Hadoop Mapper/Reducer堆大小:
-Xmx2G
- 流式API:
- 映射器:
/bin/cat
- 减速器:
wc
- 映射器:
- 输入文件是一个350兆字节的文件,包含一行
a
Text
-对象的堆大小不应超过700MB-假设Text
也使用每个字符16位-我不确定这一点,但我可以想象Text
只使用8位
所以有这些(最坏情况)700MB线路。该行应该至少能容纳堆中的2倍,但我总是遇到内存不足的错误
这是Hadoop中的一个可能的错误(例如,非保存副本),还是我不理解一些需要大量内存的步骤
如果有任何进一步的提示,我将非常感激 通过设置
mapred.child.java.opts
属性,可以更改运行任务的每个子JVM的内存。默认设置为
-Xmx200m,为每个任务提供200 MB的内存
当你说-
输入文件是一个350MB的文件,其中包含一行a
我假设您的文件有一行包含所有a的单端行分隔符
如果将其作为map(key,value)函数中的一个值,我认为,您可能会有内存问题,因为您的任务只能使用200MB,并且您的内存中有一个350MB的记录。谢谢。但我的问题是
mapred.child.java.opts
是-Xmx2048M
,因此一个任务最多可以使用2GBmemory@mt_:你整个系统有多少钱?以及,为该机器的tasktracker和datanode分配了多少内存?每台机器都有16GB内存,配置为2个映射任务和1个reduce任务->任何时候都不应使用超过6GB的内存。HADOOP\u HEAPSIZE
是5GB-因此datanode和tasktracker应该有每个5GB堆-这可能是罪魁祸首,因为值可能是5GB更重要的是,这似乎与这份失败的工作无关。在HADOOP\u HEAPSIZE
设置为2GB、4GB或5GB的计算机上,任务失败。没什么大不了的