我在我的 MR 代码中使用了 Mahout XMLINPUTFORMAT,并且成功处理了 XML(小尺寸)。
现在,当我尝试发送 800MB 的输入 XML 文件时出现 Java 堆内存异常,强文本映射已处理到 83% 并且作业失败。
我尝试了以下配置,尽管在过程中运气不佳。
谁能告诉我如何处理大型(巨大)数据 xml 文件?
”
conf.set("mapreduce.input.fileinputformat.split.minsize","3073741824")
conf.set("mapred.child.java.opts", "-Xmx14096m -Xss2048m")
conf.set("mapreduce.map.child.java.opts", "-Xmx8072m")
conf.set("mapreduce.reduce.child.java.opts", "-Xmx3024m")
conf.setInt("io.sort.factor",15 )
conf.setInt("mapreduce.task.io.sort.mb",2048 )
conf.set("mapreduce.task.timeout","6000000")
conf.set("mapreduce.map.memory.mb", "3072")
conf.set("mapreduce.map.java.opts", "-Xmx3072m")
conf.set("mapreduce.reduce.memory.mb", "1024")
conf.set("mapreduce.reduce.java.opts", "-Xmx1024m")
conf.set("task.io.sort.mb", "2048")
conf.set("task.io.sort.factor", "100")
conf.set("mapred.job.shuffle.input.buffer.percent","0.40")
最佳答案
看起来你的配置有问题。
首先,您不需要 mapred.child.java.opts
或 mapreduce.(map|reduce).child.java.opts
设置。
其次,您希望 mapreduce.(map|reduce).java.opts
中设置的堆空间为 mapreduce.(map|reduce).memory.mb
的 80% >
如果进行这些更改后,您仍然面临堆空间问题,我建议您处理较小的拆分或增加任务的堆空间。
关于xml - Mapreduce - 处理大型 xml 文件时出现堆内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26377390/