hadoop inputformat将键设置为输入文件路径

5jvtdoz2  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(391)

我的hadoop作业需要知道每个记录所派生的输入路径。
例如,假设我正在s3对象集合上运行作业:

s3://bucket/file1
s3://bucket/file2
s3://bucket/file3

我想减少键值对,例如

s3://bucket/file1    record1
s3://bucket/file1    record2
s3://bucket/file2    record1
...

有没有分机 org.apache.hadoop.mapreduce.InputFormat 就可以做到这一点吗?或者有没有比使用自定义输入格式更好的方法呢?
我知道在Map绘制程序中,可以从 MapContext (如何在hadoop程序中在mapper中获得输入文件名?)但是我使用apachecrunch,我无法控制我的任何步骤是否是maps或reduce,但是我可以可靠地控制inputformat,所以在我看来,它就是这样做的地方。

pepwfjgg

pepwfjgg1#

请看我的博客文章,自定义inputsplit和recordreader。
该博客中的代码如下所示设置键(recordreader代码的第69-70行)

value = new Text(line);
key = new LongWritable(splitstart);

在你的情况下,你需要设置关键如下,我没有测试它虽然。

key = fsplit.getPath().toString();

相关问题