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.
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
}
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
.
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