Różnica w wywołaniu pracy

Jaka jest różnica między wywołaniem zadania mapreduce z main() a z ToolRunner.run()? Kiedy mówimy, że główna klasa mówi, MapReduce extends Configured implements Tool, Jakie są dodatkowe uprawnienia, które otrzymujemy, a których nie mamy, gdybyśmy mieli wykonać proste uruchomienie zadania z głównej metody? Dzięki.

Author: hochl, 2012-03-25

2 answers

Nie ma dodatkowych uprawnień, ale opcje linii poleceń są uruchamiane przez GenericOptionsParser, który pozwoli Ci wyodrębnić pewne właściwości konfiguracyjne i skonfigurować z niego obiekt konfiguracyjny:

Http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/util/GenericOptionsParser.html

Zasadniczo, zamiast parsować niektóre opcje samodzielnie (używając indeksu argumentu na liście), możesz jawnie skonfigurować właściwości konfiguracji z linii poleceń:

hadoop jar myJar.jar com.Main prop1value prop2value

public static void main(String args[]) {
    Configuration conf = new Configuration();
    conf.set("prop1", args[0]);
    conf.set("prop2", args[1]);

    conf.get("prop1"); // will resolve to "prop1Value"
    conf.get("prop2"); // will resolve to "prop2Value"
}

Staje się znacznie bardziej skondensowany z Toolrunnerem:

hadoop jar myJar.jar com.Main -Dprop1=prop1value -Dprop2=prop2value

public int run(String args[]) {
    Configuration conf = getConf();

    conf.get("prop1"); // will resolve to "prop1Value"
    conf.get("prop2"); // will resolve to "prop2Value"
}

Ostatnie słowo ostrzeżenia: podczas używania metody konfiguracyjnej getConf(), najpierw Utwórz swój obiekt Job, a następnie wyciągnij jego konfigurację - konstruktor zadania tworzy kopię przekazanego obiektu Configruation, więc jeśli dokonasz zmian w przekazanym referencji, zadanie nie zobaczy tych zmian:

public int run(String args[]) {
    Configuration conf = getConf();

    conf.set("prop3", "blah");

    Job job = new Job(conf); // job will have a deep copy of conf

    conf.set("prop4", "dummy"); // here we're amending the original conf

    job.getConfiguration().get("prop4"); // will resolve to null
}
 23
Author: Chris White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-25 14:05:46

Za pomocą ToolRunner .run (), każda aplikacja hadoop może obsługiwać standardowe opcje wiersza poleceń obsługiwane przez hadoop. ToolRunner używa GenericOptionsParser wewnętrznie. W skrócie, opcje hadoop określone w wierszu poleceń są przetwarzane i ustawiane w obiekcie Configuration aplikacji. Jeśli po prostu użyjesz main (), nie stanie się to automatycznie.

Np. Jeśli powiesz:

% hadoop MyHadoopApp -D mapred.reduce.tasks=3

Wtedy ToolRunner.run(new MyHadoopApp(), args) automatycznie ustawi wartość parametr mapred.reduce.tasks do 3 w obiekcie Configuration.

Nie ma żadnych dodatkowych przywilejów, które otrzymujemy. Zazwyczaj ludzie nie używają po prostu main () w zadaniach hadoop. Korzystanie Z Narzędzia ToolRunner .run() jest standardową praktyką.
 11
Author: Tejas Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-25 14:14:07