ApachePig不能在多个Map上加载共享对象(但只能在一个Map上运行)

f4t66c6m  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(263)

这个问题不太可能帮助任何未来的游客;它只与一个小的地理区域、一个特定的时刻或一个非常狭窄的情况有关,而这些情况通常不适用于互联网的全球受众。有关使此问题更广泛适用的帮助,请访问帮助中心。
7年前关门了。
所以我们已经编写了一个jni,然后我们编写了一个udf,以便能够从apachepig调用我们的jni。现在的问题是,我们得到了这个错误,但只有当我们运行它与多个Map(只有一个Map,一切正常):

Native code library failed to load. java.lang.UnsatisfiedLinkError:
Can't load library: /usr/lib/libdclassjni.so

我认为这与apache pig手册中的以下部分有关:
用户遇到的一个问题是,当他们假设udf的构造函数被调用了多少次时。例如,他们可能在store函数中创建侧文件,并在构造函数中执行这项操作,这似乎是一个好主意。这种方法的问题是,在大多数情况下,pig在客户端示例化函数,例如,检查数据的模式。
用户不应该假设一个函数示例化了多少次;相反,它们应该使代码对多个示例具有弹性。例如,他们可以在创建文件之前检查文件是否存在。
在udf中,我们有一个构造函数,该构造函数反过来示例化另一个类,而那个类是这样做的

System.load("/usr/lib/libdclassjni.so").

我可以保证所有节点上都安装了lidbclassjni.so。所以主要的问题是为什么apachepig不能加载共享对象。还有,udf应该是什么样子,这样我们就可以避免这个问题了。
热释光;dr=>
在hadoop上的apahce pig udf中使用jni。在一张Map上效果很好,但在多张Map上我得到
无法加载本机代码库。java.lang.unsatifiedLinkError:无法加载库:/usr/lib/libdclassjni.so
谢谢你对这件事的了解
更新:
固定的

fzsnzjdm

fzsnzjdm1#

[fixed]结果是.so在所有hadoop节点上都不存在。

相关问题