一个映射器类-Hadoop中的多个输入文件

时间:2017-01-27 06:05:07

标签: hadoop

我有两个文件说file1.txt和file2.txt,里面有一些记录。两个文件都有相同的架构。我正在使用一个Mapper类。我想知道mapper类中的元组是否来自file1或file2

2 个答案:

答案 0 :(得分:0)

如果要识别输入文件数据的来源,则需要覆盖run方法和recordreader类方法。我会建议你改为复杂一点。

您可以制作多个映射器来读取这两个文件,然后在每个映射器中,您可以在输出中添加一些令牌,这可以帮助您根据映射器识别结果。现在在您的驱动程序类中,您需要使用multipleinput类。请访问此链接以获取更多信息   (https://hadoop.apache.org/docs/r2.6.3/api/org/apache/hadoop/mapreduce/lib/input/MultipleInputs.html)。

当你运行你的jar文件时,给出你想要读取输入数据的两个输入文件的路径,以及你想要存储输出的路径。

有关详细信息,请参阅此处http://dailyhadoopsoup.blogspot.in/2014/01/mutiple-input-files-in-mapreduce-easy.html?m=1

我希望这可以解决你的问题。

答案 1 :(得分:0)

你可以试试这个: -

我们在map中编写逻辑以获取文件名信息,以防我们将多个文件发送到单个映射器。

如果我的mapper只获取一个文件,我们可以在setup方法中写这个。这样可以节省I / O操作并仅提取一次。

String filename = new String; public void map(LongWritable key, Text values,Context context) { FileSplit fsFileSplit = (FileSplit) context.getInputSplit(); filename = context.getConfiguration().get(fsFileSplit.getPath().getParent().getName())); }

在此之后,您还可以编写一个逻辑来根据文件名隔离结果(读取的行)。