ฟังก์ชัน Cascading ดำเนินการในเธรดเดี่ยวเป็นฟังก์ชันผู้ทำแผนที่ Hadoop หรือไม่

ฉันกำลังอ่านเอกสารประกอบบทที่ 5.2 ฟังก์ชั่น และฉันสงสัยว่าจะเกิดอะไรขึ้นกับโค้ดต่อไปนี้ มันควรจะทำงานได้ดีในสภาพแวดล้อมแบบมัลติเธรดหรือไม่? คำถามทั่วไปคือ Function สามารถเป็นแบบมัลติเธรดได้หรือไม่ ดังที่ฉันรู้ว่าผู้ทำแผนที่ตัวเดียวนั้นเป็นเธรดเดี่ยว

โดยเฉพาะอย่างยิ่งฉันได้ทดสอบโค้ดดังกล่าวแล้วและสำหรับฉันแล้วดูเหมือนว่านี่ไม่ปลอดภัยสำหรับเธรด บางทีฉันอาจไม่เข้าใจเอกสารในหน้า (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 แหล่งที่มา


คำตอบ (1)


ตามเอกสารประกอบการเรียงซ้อน สิ่งนี้น่าจะทำงานได้ดี และ อันที่จริงเหตุผลหลักในการใช้บริบทในการดำเนินการแบบไม่รวมกลุ่ม

person diomedes01    schedule 20.11.2013