有一个Mapper类是线程安全的

时间:2013-03-20 15:07:33

标签: java hadoop thread-safety mapreduce

为避免在Hadoop Mapper类的每个实例上分配内存,然后依赖GC清理此内存,我使用我在map方法中读取和写入的静态对象。

我是否必须关心线程安全?

2 个答案:

答案 0 :(得分:3)

默认情况下,每个map任务都将在自己的JVM上运行。因此,使用静态对象不会带来任何好处。除非你真的遇到性能问题,否则我建议不要做一些奇怪的事情。

答案 1 :(得分:1)

添加Enno和Quetzalcoatl所说的内容。 当地图任务在JVM中运行时,它会创建一个Mapper类的单个对象,并为每个输入调用map fn(即使用TextInputFormat时对文件的每一行)。 但它按顺序调用地图fn而不是并行调用。 因此,您正在使用的对象的线程安全应该没有问题。

此致 和Manish