用于所有映射任务的Hadoop缓存文件



我的映射函数必须为每个输入读取一个文件。那个文件一点也没变,只是用来读的。我认为分布式缓存可能对我有很大帮助,但我找不到使用它的方法。我需要覆盖的公共void configure(JobConf)函数,我认为已经被弃用了。Well JobConf肯定不受欢迎。所有DistributedCache教程都使用了不推荐使用的方法。我该怎么办?是否有其他我可以覆盖的配置函数??

这是我的地图功能的第一行:

     Configuration conf = new Configuration();          //load the MFile
     FileSystem fs = FileSystem.get(conf);
     Path inFile = new Path("planet/MFile");       
     FSDataInputStream in = fs.open(inFile);
     DecisionTree dtree=new DecisionTree().loadTree(in);

我想缓存那个MFile,这样我的映射函数就不需要一遍又一遍地查看它

我想我做到了。我遵循了拉维·巴特的建议,我写了这样的:

  @Override
  protected void setup(Context context) throws IOException, InterruptedException
  {      
      FileSystem fs = FileSystem.get(context.getConfiguration());
      URI files[]=DistributedCache.getCacheFiles(context.getConfiguration());
      Path path = new Path(files[0].toString());
      in = fs.open(path);
      dtree=new DecisionTree().loadTree(in);                 
  } 

在我的主要方法中,我这样做,将其添加到缓存中:

  DistributedCache.addCacheFile(new URI(args[0]+"/"+"MFile"), conf);
  Job job = new Job(conf, "MR phase one");

我可以用这种方式检索我需要的文件,但还不能确定它是否100%有效。有什么方法可以测试它吗?谢谢

Jobconf0.20. x中已弃用,但在1.0.0中则不然!:-)(截至本文撰写之时)

对于您的问题,有两种方法可以在java中运行map reduce作业,一种是使用org.apache.hadoop.mapreduce包中的(extending)类,另一种是org.apache.hadoop.mapred包中的implementing类(或者反过来)。

不确定您使用的是哪一个,如果您没有要覆盖的configure方法,您将获得要覆盖的setup方法。

@Override
protected void setup(Context context) throws IOException, InterruptedException

这与配置类似,应该会对您有所帮助。

当您在org.apache.hadoop.mapreduce包中extend Mapper class时,您将获得一个setup方法到override

相关内容

  • 没有找到相关文章

最新更新