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