ipo*_*rto 5 hadoop mapreduce out-of-memory
更新2012年11月21日:
通过将属性mapred.child.java.opts设置为-Xmx512m解决了问题.在此之前,我在core-site.xml中将HADOOP_HEAPSIZE设置为2000,但这没有用.我仍然不明白为什么程序在本地工作,但它不是分布式的.感谢所有的答案.
我正在使用Hadoop 1.0.3.该集群由三台机器组成,所有机器都运行Ubuntu Linux 12.04 LTS.其中两台机器有12 GB RAM,第三台机器有4 GB.我正在通过DistributedCache读取大约40 MB的本地文件.我的程序在本地环境(本地/独立模式)下完美运行.但是,当我在Hadoop集群中执行它(完全分布式模式)时,我得到一个"OutOfMemoryError:Java堆空间",具有相同的40 MB文件.我不明白为什么会这样,因为文件不是那么大.这是代码:
public static class MapClass extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> {
// ...
private HashMap<String, String> urlTrad = new HashMap<String, String>();
// ...
@Override
public void configure(JobConf job) {
Path[] urlsFiles = new Path[0];
BufferedReader fis;
try {
urlsFiles = DistributedCache.getLocalCacheFiles(job);
fis = new BufferedReader(new FileReader(
urlsFiles[0].toString()));
String pattern;
while ((pattern = fis.readLine()) != null) {
String[] parts = pattern.split("\t");
urlTrad.put(parts[0], parts[1]);
}
fis.close();
} catch (IOException ioe) {
System.err
.println("Caught exception while parsing the cached file '"
+ urlsFiles[0]
+ "' : "
+ StringUtils.stringifyException(ioe));
}
}
// ...
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,提前谢谢.
通过将属性 mapred.child.java.opts 设置为 -Xmx512m 解决了问题。在此之前,我已在 core-site.xml 中将 HADOOP_HEAPSIZE 设置为 2000,但这没有帮助。我仍然不明白为什么该程序可以在本地运行但不能分布式运行。
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |