我需要为我的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上的my/hadoop/fs/mystuff/libs上。我将它们全部添加到分布式缓存中,甚至尝试使用system.loadlibrary()调用在reduce任务中加载它们。但我总是得到同样的java.library.path错误。我还尝试将这些库作为命令行参数添加到-files标志中,但仍然出现上述错误。
2条答案
按热度按时间lxkprmvk1#
你试过我们的代码独立,而不是在Map减少?据我所知,system.loadlibrary要求库名不带“.so”或“.dll”后缀。。。
sf6xfgos2#
尽管不确定为什么会发生这种情况,但请查看cloudera的how to include third party libraries in your map reduce job blog条目。