gpt4 book ai didi

java - NLineInputFormat 用法超出了 GC 开销限制

转载 作者:可可西里 更新时间:2023-11-01 14:52:47 25 4
gpt4 key购买 nike

我正在尝试读取映射器中的多行。为此,我开始使用 NLineInputFormat 类。使用它时,我收到 GC 限制错误。作为引用,错误代码是:

16/02/21 01:37:13 INFO mapreduce.Job:  map 0% reduce 0%
16/02/21 01:37:38 WARN mapred.LocalJobRunner: job_local726191039_0001
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1019)
at java.util.concurrent.ConcurrentHashMap.putAll(ConcurrentHashMap.java:1084)
at java.util.concurrent.ConcurrentHashMap.<init>(ConcurrentHashMap.java:852)
at org.apache.hadoop.conf.Configuration.<init>(Configuration.java:713)
at org.apache.hadoop.mapred.JobConf.<init>(JobConf.java:442)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.<init>(LocalJobRunner.java:217)
at org.apache.hadoop.mapred.LocalJobRunner$Job.getMapTaskRunnables(LocalJobRunner.java:272)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:517)
16/02/21 01:37:39 INFO mapreduce.Job: Job job_local726191039_0001 failed with state FAILED due to: NA

作为引用,请在下面找到代码片段。

public class JobLauncher {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "TestDemo");
job.setJarByClass(JobLauncher.class);

job.setMapperClass(CSVMapper.class);
job.setMapOutputKeyClass(NullWritable.class);
job.setMapOutputValueClass(NullWritable.class);

conf.setInt(NLineInputFormat.LINES_PER_MAP, 3);
job.setInputFormatClass(NLineInputFormat.class);
NLineInputFormat.addInputPath(job, new Path(args[0]));

job.setNumReduceTasks(0);
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

我只有简单的 CSVMapper 映射器。为什么我会收到此错误?请帮我解决这个错误。

提前致谢。

最佳答案

Why I am getting this error?

一般来说,对于 OOME 最可能的解释是内存不足,因为

  • 你的代码有内存泄漏,或者
  • 您没有足够的内存来记录您尝试做的事情/您尝试做这件事的方式

(由于 OOME 的这种特殊“ flavor ”,您还没有完全耗尽内存。但是,很可能您接近耗尽,这导致了 GC CPU 使用率达到峰值,超过“GC 开销”阈值。这个细节不会改变您应该尝试解决问题的方式。)

在您的情况下,错误似乎是在您将文件中的输入加载到 map (或 map 集合)时发生的。因此可以推断,您已经告诉 Hadoop 一次加载的数据多于内存所能容纳的数据。

Please help me resolve this error.

解决方案:

  • 减小输入文件的大小;例如把你的问题分解成更小的问题
  • 增加受影响的 JVM 的内存大小(特别是 Java 堆大小)。
  • 更改您的应用程序,以便作业本身从文件(或 HFS)流式传输数据......而不是将 CSV 文件加载到 map 中。

如果您需要更具体的答案,则需要提供更多详细信息。

关于java - NLineInputFormat 用法超出了 GC 开销限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35532453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com