我有一个我需要为我的reduce方法加载的本机库,我将它添加到分布式缓存中,但是当我在map方法中调用System.loadLibrary(mylib.so)时,我收到错误并且映射任务失败:< / p>
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标志,但我仍然得到上面的错误。
答案 0 :(得分:0)
虽然不确定为什么会发生这种情况,但请查看Cloudera的How to Include Third-Party Libraries in Your Map-Reduce Job博客文章。
答案 1 :(得分:0)
您是否单独尝试我们的代码,而不是map-reduce?我所知道的,System.loadLibrary期望库名没有&#34; .so&#34;或&#34; .dll&#34;后缀...