你好,游客 登录 注册 发布搜索
背景:
阅读新闻

Hadoop在Mapper内部获取Input File的文件名

[日期:2013-10-11] 来源:KENGINE | Kankanews.com  作者: [字体: ]

好吧,我承认用Hadoop来处理大数据是件很酷的事。但是有时候在做course project的时候还是让我很受挫。 
很多时候我们在一个map-reduce任务中,会用到Join,这样整个job的输入可能就是两个以上的文件了(换句话说:mapper要处理两个以上的文件)。

如何用mapper处理多输入的情况:

多个mapper:每个mapper处理对应的输入文件https://github.com/zhouhao/Hadoop_Project1/blob/master/MapReduceQueries/Query3/query3.java

MultipleInputs.addInputPath(conf, new Path(args[0]), TextInputFormat.class, CustomerMap.class);
  MultipleInputs.addInputPath(conf, new Path(args[1]), TextInputFormat.class, TransactionMap.class);
  FileOutputFormat.setOutputPath(conf, new Path(args[2]));

一个mapper:一个mapper处理所有不同的文件(如下代码段,在mapper内部,我们可以数据来自哪个文件,然后进行相应的处理)

public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> 
    {

    public void map(LongWritable key, Text value, OutputCollector<Text,Text> output, Reporter reporter) throws IOException 
    {
        //Get FileName from reporter
        FileSplit fileSplit = (FileSplit)reporter.getInputSplit();
        String filename = fileSplit.getPath().getName();

        //String line = value.toString();
        output.collect(new Text(filename),value);           
    }
    }

PS: mapper的输入可以是一个文件夹:FileInputFormat.setInputPaths(conf, new Path("/tmp/"));

收藏 推荐 打印 | 录入: | 阅读:
相关新闻       Hadoop 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款