JRa*_*aSH 5 multithreading hadoop
我想知道是否可以添加一个可以在多个map()调用中使用的成员对象.例如,StringBuilder:
private StringBuilder builder;
public void map(...){
...
builder.setLength(0);
builder.append(a);
builder.append(b);
builder.append(c);
d = builder.toString();
...
}
Run Code Online (Sandbox Code Playgroud)
显然,如果映射器对象跨多个线程共享,则由于来自多个线程的并发访问,上面的构建器对象将不会按预期运行.
所以我的问题是:是否确保hadoop中的每个线程都将使用一个专用的映射器对象?或者它是可配置的行为?
谢谢
只要你使用的不是该类MultithreadedMapper,而是你自己的类,就不会有问题。map()称为顺序而不是并行。
通常使用 aStringBuilder或其他数据结构来缓冲调用之间的一些对象。但请确保从输入对象中克隆对象,只有一个对象,并且它将被一遍又一遍地填充以防止大量 GC。
因此无需同步或处理竞争条件。
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |