4

我的地图功能必须为每个输入读取一个文件。该文件根本没有改变,它只是为了阅读。我认为分布式缓存可能对我有很大帮助,但我找不到使用它的方法。我认为不推荐使用我需要覆盖的 public void configure(JobConf conf) 函数。那么 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,这样我的地图函数就不需要一遍又一遍地查看它

4

2 回答 2

5

好吧,我做到了,我想。我遵循了 Ravi Bhatt 的提示,我写了这个:

  @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% 有效。有什么方法可以测试吗?谢谢。

于 2012-02-15T23:45:45.643 回答
1

Jobconf0.20.x 中已弃用,但1.0.0事实并非如此!:-)(截至撰写本文时)

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

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

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

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

当你在包装中时,你会得到一个setup方法。overrideextend Mapper classorg.apache.hadoop.mapreduce

于 2012-02-14T09:20:25.270 回答