hadoop - 级联函数在单个线程中作为hadoop映射器函数执行吗?

标签 hadoop mapreduce cascading

我正在阅读级联文档第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 );
   }
}

最佳答案

基于Cascading documentation,这应该可以正常工作,并且实际上是在非聚合操作中使用Context的主要原因。

关于hadoop - 级联函数在单个线程中作为hadoop映射器函数执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019056/

相关文章:

mysql - 如何在mysql中缓存级联选择查询的子集

java - Hadoop 2.7.2 HA群集无法启动备用名称节点

hadoop - 生成 HDFS 序列文件

ubuntu - 在Ubuntu的标准Hadoop核心2.6上安装Hue

linux - 什么时候需要设置 Block replication 为 1

hadoop - 有没有办法为 Hadoop 中的推测执行配置超时?

hadoop - Spark 和 Map-Reduce 一起使用

javascript - 通过 Map-Function (CouchDB) 连接两个文档时出现问题

java - 为什么在不先通过复制构造函数复制实例的情况下保存实例不是一个好主意?

java - 无法通过级联一键连接两个文件