2012-03-25 15 views
15

Bir mapreduce işini main()'dan ve ToolRunner.run() arasındaki fark nedir? Ana dersin, MapReduce extends Configured implements Tool olduğunu söylediğimizde, ana metottan sadece işin basit bir işini yapmak için elimizde olmayan ek ayrıcalıklarımız nelerdir? Teşekkürler.İşi aramadaki fark

cevap

23

Hiçbir ekstra ayrıcalıklar, ama komut satırı seçenekleri belirli yapılandırma özellikleri elde etmek ve ondan bir yapılandırma nesnesi yapılandırmak sağlayacak GenericOptionsParser aracılığıyla çalıştırmak olsun: ziyade Temelde

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

ayrıştırma bazı olduğunu

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

kadar mor Oldu: (listedeki argüman dizinini kullanarak) seçenekleri kendiniz, açıkça komut satırından yapılandırma özelliklerini yapılandırabilirsiniz e ToolRunner ile yoğunlaştırılmış: uyarı

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

Son bir kelime olsa: Yapılandırma yöntemini getconf() kullanırken, daha sonra, önce İş nesnesi oluşturmak çekin onun Yapılandırma dışarı - İş yapıcı Configruation nesnenin bir kopyasını yapar

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 
} 
+0

Bu, kodla ilgili iyi bir açıklamaydı. İlk önce Job nesnesini yaratma ve daha sonra konfigürasyonunu alma gibi birkaç nokta fark etmedim ama şimdi mantıklı geliyor .. –

11

, herhangi Hadoop uygulama standard command line options Hadoop tarafından desteklenen işleyebilir) (ToolRunner .run kullanarak: Eğer geçirilen referans değişiklik yaparsa, size iş bu değişiklikleri gözle görülmeyecek kadar, içinde geçti. ToolRunner, dahili olarak GenericOptionsParser kullanır. Kısaca, komut satırı sağlanan hadoop özel seçenekleri ayrıştırılır ve uygulamanın Configuration nesnesine ayarlanır. Eğer sadece main() kullanırsanız, bu otomatik olarak gerçekleşmez. Örn.,

örn. Derseniz:

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

Sonra ToolRunner.run(new MyHadoopApp(), args) otomatik Configuration nesnede 3'e değer parametresini mapred.reduce.tasks ayarlayacaktır.

Getirdiğimiz başka ayrıcalık yok. Tipik olarak insanlar hadoop işlerinde basitçe main() kullanmazlar. ToolRunner .run() kullanımı standart bir uygulamadır.

+0

@ TejasP- Thanx a lot !! :) Evet, aklımda böyle belirsiz bir fikir vardı ama şimdi açık .. –

İlgili konular