我有一个本地库需要为我的reduce方法加载,我将它添加到分布式缓存中,但当我在map方法中调用System.loadLibrary(mylib.so)时,我得到一个错误和失败的map任务:
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标志中,但仍然收到上面的错误。
发布于 2012-10-19 12:08:49
虽然完全不确定为什么会发生这种情况,但请查看Cloudera的How to Include Third-Party Libraries in Your Map-Reduce Job博客条目。
发布于 2014-10-14 02:10:30
您是否尝试我们的代码独立,而不是在map-reduce中?据我所知,System.loadLibrary需要没有".so“或".dll”后缀的库名...
https://stackoverflow.com/questions/12962508
复制相似问题