在hadoop reducer中加载本机库?

h7appiyu  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(471)

我需要为我的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标志中,但仍然出现上述错误。

lxkprmvk

lxkprmvk1#

你试过我们的代码独立,而不是在Map减少?据我所知,system.loadlibrary要求库名不带“.so”或“.dll”后缀。。。

sf6xfgos

sf6xfgos2#

尽管不确定为什么会发生这种情况,但请查看cloudera的how to include third party libraries in your map reduce job blog条目。

相关问题