为了避免在Hadoop Mapper
类的每个实例上分配内存,然后依赖GC来清理这些内存,我使用静态对象,我在map
方法中访问读写。
我必须关心线程安全吗?
默认情况下,每个映射任务将在自己的JVM上运行。所以你不会从使用静态对象中得到任何好处。我建议不要做一些奇怪的事情,除非你真的遇到性能问题。
再加上Enno和Quetzalcoatl说过的话。当map任务在JVM中运行时,它创建Mapper类的单个对象,并为每个输入(即使用TextInputFormat时为文件的每一行)调用mapfn。但它按顺序调用fn,而不是并行调用。因此,应该没有您正在使用的对象的线程安全问题。
问候,Manish