- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试读取映射器中的多行。为此,我开始使用 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.
解决方案:
如果您需要更具体的答案,则需要提供更多详细信息。
关于java - NLineInputFormat 用法超出了 GC 开销限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35532453/
我使用的是 Hadoop 0.20.2,并且使用的是旧 API。我正在尝试将数据 block 发送到映射器,而不是一次发送一行(数据涵盖多行)。我尝试使用 NLineInputFormat 来设置一次
$ cat abook.txt | base64 –w 0 >onelinetext.b64 $ hadoop fs –put onelinetext.b64 /input/onelinetext.b
我已经为我们的映射器编写了自定义 Recordreader,以便一次从源文件接收 3 条记录(3 行),而不是 TextInputFormat 默认提供的 1 行。以下是示例代码片段。 扩展 Text
我想要的基本上是让每个数据元素由 10 行组成。但是,使用以下代码,每个元素仍然是一行。我在这里犯了什么错误? val conf = new SparkConf().setAppName("MyApp
我正在尝试读取映射器中的多行。为此,我开始使用 NLineInputFormat 类。使用它时,我收到 GC 限制错误。作为引用,错误代码是: 16/02/21 01:37:13 INFO mapre
我试图限制每个映射器获得的行数。我的代码是这样的: package com.iathao.mapreduce; import java.io.IOException; impo
我有一个基于文本的输入文件,大小约为25 GB。在该文件中,一条记录由 4 行组成。每条记录 的处理都是相同的。但是在每条记录中,四行中的每一行都以不同的方式处理。 我是 Hadoop 的新手,所以我
如果是,HDFS 如何将输入文件拆分为 N 行以供每个映射器读取? 我相信这是不可能的! 当拆分器需要偏移量或字节进行拆分时,可以在不处理整个输入文件的情况下进行拆分。 但是当 '\n' 或换行符的数
我是一名优秀的程序员,十分优秀!