gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:10:10 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com