apakah fungsi Cascading dijalankan dalam utas tunggal sebagai fungsi pemetaan hadoop?

Saya sedang membaca dokumentasi cascading bab 5.2 Fungsi dan saya ingin tahu apa yang akan terjadi dengan kode berikut. Haruskah ini berfungsi dengan baik di lingkungan multithread? Pertanyaan yang lebih umum adalah apakah Fungsinya bisa multithread? seperti yang saya tahu, mapper tunggal berulir tunggal.

Secara khusus saya telah menguji kode tersebut dan menurut saya ini tidak aman untuk thread. Mungkin saya kurang memahami dengan baik dokumentasi di halaman (39).

public class NotThreadSafeObject{ 
 ...
 public void doSomething(){
       // update state
 }
 public String getValue(){
       // returns value from state 
 }
public class SomeFunction extends BaseOperation<Tuple> implements Function<Tuple>
 {
    // constructors
   @Override
   public void prepare( FlowProcess flowProcess, OperationCall<Tuple> call )
   {
   // create a reusable Object with state of size 1
    call.setContext( new NotThreadSafeObject() );
   }

   public void operate( FlowProcess flowProcess, FunctionCall<Tuple> call )
   {
     // ...
     NotThreadSafeObject obj = call.getContext();
     obj.doSomething(); 
     Tuple tup = new Tuple();
     tup.set(0,obj.getValue());  
     call.getOutputCollector().add(tup);
   }

   @Override
   public void cleanup( FlowProcess flowProcess, OperationCall<Tuple> call )
   {
      call.setContext( null );
   }
}

person Julias    schedule 10.06.2013    source sumber


Jawaban (1)


Berdasarkan Dokumentasi Cascading, ini akan berfungsi dengan baik, dan sebenarnya alasan utama untuk menggunakan Konteks dalam operasi non-agregat.

person diomedes01    schedule 20.11.2013