我有一个本机库,我需要为我的reduce方法加载,并将其添加到分布式缓存中,但是当我在map方法中调用System.loadLibrary(mylib.so)时,出现错误并且映射任务失败:

Error: no mylib.so in java.library.path

即使我将其添加到分布式缓存中。我错过了一步吗?在我的工作配置中,我称:
DistributedCache.addCacheFile(uri, job.getConfiguration());

uri是hadoop文件系统上mylib.so的路径。

这个本地库依赖于许多其他库,所有库都存在于hadoop fs上的/ hadoop / fs / mystuff / libs中。我将它们全部添加到分布式缓存中,甚至尝试使用System.loadLibrary()调用在我的reduce任务中加载所有它们。但是我不断收到同样的java.library.path错误。我也尝试将库作为命令行参数添加到-files标志,但是仍然出现上述错误。

最佳答案

尽管不确定为什么会这样,但请查看Cloudera的How to Include Third-Party Libraries in Your Map-Reduce Job博客条目。

10-07 19:00
查看更多