Qual é a utilização da classe configurada nos programas Hadoop

A maioria dos programas Hadoop MapReduce são assim:
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);
    }
}

Qual é o uso de Configured? Como Tool e Configured ambos têm getConf() e setConf() em comum. O que fornece à nossa aplicação?

Author: Azim, 2013-01-03

2 answers

Configured é uma classe de implementação de Configurable. Configured é a classe base que tem as implementações de getConf() e setConf().

Simplesmente estender esta classe de base permite que a classe que estende isto seja configurada usando um Configuration e existem mais de uma implementações para Configuration.

Quando o seu código executa a seguinte linha,

ToolRunner.run(new MyApp(), args);
Internamente, fará isto.
ToolRunner.run(tool.getConf(), tool, args);

No caso acima tool é a MyApp instância de classe que é uma implementação de {[11] } que tal como você disse tem getConf() mas é apenas como uma interface. A implementação vem da classe base Configured. Se você evitar estender a classe Configured no código acima, então você terá que fazer as implementações getConf() e setConf() por conta própria.

 10
Author: shazin, 2013-01-03 11:52:19

Configured é uma implementação padrão do Configurable interface-basicamente o seu método setConf mantém uma variável de instância privada no objecto passado Configuration e getConf() devolve essa referência

Tool é uma extensão do Configurable interface, fornecendo uma adição run(..) método, e é usado com ToolRunner para analisar as opções de linha de comando (usando o GenericOptionsParser) e construir um Configuration objeto que é então passado para o setConf(..) metodo.

A sua classe principal irá normalmente estender-se configurada de modo a que os métodos de interface configuráveis necessários na ferramenta sejam implementados para si.

De um modo geral, deverá estar a usar a classe de utilitários ToolRunner para lançar as suas tarefas MapReduce à medida que lida com a tarefa comum de analisar os argumentos da linha de comandos e de construir o objecto de configuração. Eu iria ver os documentos da API para mais informações.

 3
Author: Chris White, 2013-01-03 11:51:38