java静态变量在可运行jar(hadoop mapreduce)中不起作用
我是hadoop新手。我试图在我的映射器中使用一个静态变量。 我在主类中声明静态变量
public static String var="";
之后,我在main()中给出了一些动态值 var=“123456”; 之后,我在mapper类的map()中使用这个变量
但是它给我带来了空点异常。 当我使用Eclipse时,我能够在具有maven依赖项的普通java核心项目中执行,但当我使其可运行时,jar和 在hadoop服务器上运行它会给我nullPointerException 所以我还是不明白为什么会出现这个例外任何人知道这个请帮助我
提前谢谢
我的主要班级代码
public class Tester {
public static String var;
public static void main(String args){
var="12345";
//calling mapper by job
}
}
这是我的映射器类代码
public class MyMapper {
public void map(ByteBuffer key,SortedMap<ByteBuffer, Column> column,Context context)throws IOException,InterruptedException{
//now i want to use var variable here
String str = Tester.var;
System.out.println("Variable value "+str);//this will give me nullPointerException in runnable jar
}
}
# 1 楼答案
我将假定Tester类是Hadoop作业驱动程序类。然后,您需要执行以下操作:
如果要在映射器本身中初始化变量,则应在override setup()方法中进行初始化(不在main中,因为根本不会调用main方法),如下所示