我需要发送一些运行在HBase节点上的mapper作业的信息。我已经将数据定义为类中的静态成员,但似乎当映射器在其他节点上运行时,数据没有传输到节点。有什么办法吗?
public class GetResultFromVerticesIDMapper extends TableMapper< ResultVal, IntWritable > {
public static HashMap<Long, Boolean> vertexIDsHashMap;
public static int nResultComponents;
...
}
我通过向配置发送参数来做到这一点:
Configuration conf;
conf.addResource(new Path(hbaseConfigurationFile));
conf.set("simplificationParameters", simpParameters.toString());
并按如下方式将它们放入映射器类:
_simplificationParameters.fromString(context.getConfiguration().get("simplificationParameters"));
你提到的方法是一种方法。另一种方式,如果你发送系统属性,那么它将自动设置为上下文。
在运行程序时,您可以将参数传递为系统属性(带有-D
选项)或接受输入并使用System.setProperty("simplificationParameters","user_entered_input")
设置它们
你可以在mapper或reducer中收回它,就像你在你的答案中做的那样…即context.getConfiguration().get("simplificationParameters")