Hadoop程序中Configured类的用法是什么?

时间:2013-01-03 07:40:56

标签: hadoop mapreduce toolrunner

大多数Hadoop MapReduce程序都是这样的:

public class MyApp extends Configured Implements Tool {
    @Override
    public int run(String[] args) throws Exception {
        Job job = new Job(getConf());
        /* process command line options */
        return job.waitForCompletion(true) ? 0 : 1;
    }
    public static void main(String[] args) throws Exception {
        int exitCode = ToolRunner.run(new MyApp(), args);
        System.exit(exitCode);
    }
}

Configured的用法是什么?由于ToolConfigured共有getConf()setConf()。它为我们的应用程序提供了什么?

2 个答案:

答案 0 :(得分:10)

Configured是接口Configurable的实现类。 Configured是具有getConf()setConf()实现的基类。

仅仅扩展此基类,可以使用Configuration配置扩展此基类的类,并且Configuration有多个实现。

当您的代码执行以下行时,

ToolRunner.run(new MyApp(), args);

在内部,它会这样做

ToolRunner.run(tool.getConf(), tool, args);

在上面的例子中,toolMyApp类实例,它是Tool的一个实现,就像你说的getConf()一样,但它只是一个接口。实现来自Configured基类。如果您避免在上面的代码中扩展Configured类,那么您必须自己执行getConf()setConf()实现。

答案 1 :(得分:3)

ConfiguredConfigurable接口的默认实现 - 基本上它的setConf方法保留了传递的Configuration对象的私有实例变量,并且getConf()返回那个参考

ToolConfigurable接口的扩展,提供了一个附加run(..)方法,并与ToolRunner一起用于解析命令行选项(使用{{3}然后构建一个Configuration对象,然后传递给setConf(..)方法。

您的主类通常会扩展为Configured,以便为您实现Tool中所需的可配置接口方法。

通常,您应该使用ToolRunner实用程序类来启动MapReduce作业,因为它处理解析命令行参数和构建Configuration对象的常见任务。我将查看ToolRunner的API文档以获取更多信息。