火花作业中的静态变量 -Java
Static variable inside spark job -Java
我在使用 spark 和静态变量时遇到了一些问题。我有一个带有一些静态变量的配置 class,我在运行时从 属性 文件初始化这些变量。
System.out.println("Outside : "+ActiveMQConfig.HOST_ADDRESS);
rePartition.foreachRDD(new Function<JavaRDD<String>, Void>() {
public Void call ( JavaRDD<String> rdd ) throws Exception
{
rdd.map(new Function<String, String>() {
public String call ( String line ) throws Exception
{
System.out.println("Inside :" + ActiveMQConfig.HOST_ADDRESS);
return null;
}
}).count();
return null;
}
});
ssc.remember(new Duration(1 * 60 * 1000));
ssc.start();
ActiveMQConfig.HOST_ADDRESS
的默认值是 localhost
,我在运行时从 属性 文件设置一些 IP。
第一个 system out 打印 ip Outside : ip
但 system out inside map 方法打印默认值 Inside :localhost
。我在这里做错了什么?我需要广播我想在 spark 中使用的所有变量吗?谁能指出我正确的方向?
谢谢!
这与 JVM 中的对象初始化有关。
每个工作人员都将加载并初始化 class 保存静态变量,但可能(未在问题中显示)只有驱动程序在驱动程序的 VM 上初始化此类变量的值。
结果是驱动程序有更新的值,但每个执行程序都有默认值。
解决这个问题的一种方法是明确地为闭包提供值:
rePartition.foreachRDD(new Function<JavaRDD<String>, Void>() {
String host = ActiveMQConfig.HOST_ADDRESS
...
System.out.println("Inside :" + host)
...
}
我在使用 spark 和静态变量时遇到了一些问题。我有一个带有一些静态变量的配置 class,我在运行时从 属性 文件初始化这些变量。
System.out.println("Outside : "+ActiveMQConfig.HOST_ADDRESS);
rePartition.foreachRDD(new Function<JavaRDD<String>, Void>() {
public Void call ( JavaRDD<String> rdd ) throws Exception
{
rdd.map(new Function<String, String>() {
public String call ( String line ) throws Exception
{
System.out.println("Inside :" + ActiveMQConfig.HOST_ADDRESS);
return null;
}
}).count();
return null;
}
});
ssc.remember(new Duration(1 * 60 * 1000));
ssc.start();
ActiveMQConfig.HOST_ADDRESS
的默认值是 localhost
,我在运行时从 属性 文件设置一些 IP。
第一个 system out 打印 ip Outside : ip
但 system out inside map 方法打印默认值 Inside :localhost
。我在这里做错了什么?我需要广播我想在 spark 中使用的所有变量吗?谁能指出我正确的方向?
谢谢!
这与 JVM 中的对象初始化有关。 每个工作人员都将加载并初始化 class 保存静态变量,但可能(未在问题中显示)只有驱动程序在驱动程序的 VM 上初始化此类变量的值。
结果是驱动程序有更新的值,但每个执行程序都有默认值。
解决这个问题的一种方法是明确地为闭包提供值:
rePartition.foreachRDD(new Function<JavaRDD<String>, Void>() {
String host = ActiveMQConfig.HOST_ADDRESS
...
System.out.println("Inside :" + host)
...
}