我的映射函数必须为每个输入读取一个文件。那个文件一点也没变,只是用来读的。我认为分布式缓存可能对我有很大帮助,但我找不到使用它的方法。我需要覆盖的公共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%有效。有什么方法可以测试它吗?谢谢
Jobconf
在0.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
。