Hadoop 1.2.1 - 使用分布式缓存

时间:2018-04-19 05:55:27

标签: java hadoop distributed-cache

我开发了一个使用分布式缓存的Hadoop应用程序。我使用了Hadoop 2.9.0。在独立和伪分布式模式下,一切正常。

驱动:

public class MyApp extends Configured implements Tool{
public static void main(String[] args) throws Exception{
        if(args.length < 2) {
            System.err.println("Usage: Myapp -files cache.txt <inputpath> <outputpath>");

        System.exit(-1);
    }

    int res = ToolRunner.run(new Configuration(), new IDS(), args);
    System.exit(res);

...

映射器:

public class IDSMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
@Override
    protected void setup(Context context) throws IOException {
        BufferedReader bfr = new BufferedReader(new FileReader(new File("cache.txt")));

开始:sudo bin/hadoop jar MyApp.jar -files cache.txt /input /output

现在我需要测量真正的Hadoop集群上的执行时间。不幸的是,我有Hadoop集群和Hadoop 1.2.1版本供我使用。所以我创建了新的Eclipse项目,引用了适当的Hadoop 1.2.1 jar文件,并且evertything在独立模式下工作正常。但是,在尝试读取分布式缓存文件时,使用Hadoop 1.2.1的伪分布式模式在Mapper类(安装方法)中失败并出现FileNotFoundException。

我是否必须在Hadoop 1.2.1中以其他方式处理分布式缓存文件?

1 个答案:

答案 0 :(得分:0)

问题在于run方法。我使用了没有参数的 Job.getInstance 方法,我应该这样使用它:

Job job = Job.getInstance(getConf());

我仍然不知道为什么Hadoop 2.9.0只能使用:

Job job = Job.getInstance();

getConf 解决了我的问题。