Qual é a utilização da classe configurada nos programas Hadoop
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?
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.
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.