gpt4 book ai didi

Hadoop Map Reduce 引用静态对象

转载 作者:可可西里 更新时间:2023-11-01 14:42:31 25 4
gpt4 key购买 nike

我的 map reduce 作业类中有一个静态对象,我想初始化一次(在 main 方法中),然后在每个映射中调用一个函数。所以我有这个对象,MyObject,我声明为一个变量:

static MyObject obj;

在我的主要功能中,在我开始工作之前,我调用:

obj = new MyObject();
obj.init();

然后在我的 map 函数中我想调用:

obj.execute();

但是由于某种原因,当我尝试这个时我得到了一个空指针异常(它说 obj 是空的)。如果我在主函数中初始化它,映射器不应该将其视为已初始化吗?映射器是否看到静态变量?

最佳答案

静态对象驻留在内存中。现在你的系统是分布式的所以你创建的对象在你的 jobtracker 正在运行的节点的内存中,而不是在其他系统上。

现在你不能将对象从作业传递到映射器,因为配置是用 xml 编写的,但是有一个解决方法,将你的对象序列化为 JSON,然后将它作为字符串放在你的配置中,并在映射器中反序列化这个 json 对象

工作

job.getConfiguration().set("some key", "json string")

映射器

Configuration conf = context.getConfiguration();
conf.get("some key");

关于Hadoop Map Reduce 引用静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12935774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com