gpt4 book ai didi

java - 何时在 Hadoop Map-Reduce 中使用 NLineInputFormat?

转载 作者:可可西里 更新时间:2023-11-01 14:53:27 28 4
gpt4 key购买 nike

我有一个基于文本的输入文件,大小约为25 GB。在该文件中,一条记录由 4 行组成。每条记录 的处理都是相同的。但是在每条记录中,四行中的每一行都以不同的方式处理。

我是 Hadoop 的新手,所以我想要一个指导,在这种情况下是使用 NLineInputFormat 还是使用默认的 TextInputFormat ?提前致谢!

最佳答案

假设您有以下格式的文本文件:

2015-8-02
error2014 blahblahblahblah
2015-8-02
blahblahbalh error2014

你可以使用 NLineInputFormat .

使用 NLineInputFormat 功能,您可以准确指定应将多少行发送到映射器。

在您的情况下,您可以使用每个映射器输入 4 行。

编辑:

下面是一个使用 NLineInputFormat 的例子:

映射器类:

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class MapperNLine extends Mapper<LongWritable, Text, LongWritable, Text> {

@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {

context.write(key, value);
}

}

驱动类:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.NLineInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.LazyOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class Driver extends Configured implements Tool {

@Override
public int run(String[] args) throws Exception {

if (args.length != 2) {
System.out
.printf("Two parameters are required for DriverNLineInputFormat- <input dir> <output dir>\n");
return -1;
}

Job job = new Job(getConf());
job.setJobName("NLineInputFormat example");
job.setJarByClass(Driver.class);

job.setInputFormatClass(NLineInputFormat.class);
NLineInputFormat.addInputPath(job, new Path(args[0]));
job.getConfiguration().setInt("mapreduce.input.lineinputformat.linespermap", 4);

LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);
FileOutputFormat.setOutputPath(job, new Path(args[1]));

job.setMapperClass(MapperNLine.class);
job.setNumReduceTasks(0);

boolean success = job.waitForCompletion(true);
return success ? 0 : 1;
}

public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new Configuration(), new Driver(), args);
System.exit(exitCode);
}
}

关于java - 何时在 Hadoop Map-Reduce 中使用 NLineInputFormat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28871899/

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