Nevermind! The library loads fine. Using :
DistributedCache.addCacheFile(new URI("path/to/lib.so#lib.so"), conf);
did the trick. Granted, I'm getting new JNI based errors now, but I have a
feeling they are unrelated( If they are, I will post here again).
Thanks,
Mike
montag wrote:
>
> Hi Arun,
>
> Thanks for your reply! Yes, I'm trying to load a JNI-based library. I
> tried what you suggested, but I'm still receiving an UnsatisfiedLink
> exception I noticed that if I use System.loadLibrary("lib.so") I get the
> following error:
>
> java.lang.UnsatisfiedLinkError: no lib.so in java.library.path
>
> But if i use System.load(new File("lib.so").getAbsolutePath) :
>
> java.lang.UnsatisfiedLinkError: Can't load library: /local/path/to/lib.so
>
> Thus, the symlink is working properly since the call to getAbsolutePath is
> returning the local directory, but it still isn't loading the library.
>
> Am I still loading it into the cache wrong? Do I need to set the
> conf.setLocalFiles to the localized directory or the directory in HDFS?
>
> Thanks!
> Mike
>
> Arun C Murthy wrote:
>>
>>
>> I assume you are trying to load a JNI-based library (since you refer
>> to System.load/System.loadLibrary) ...
>>
>> I've opened https://issues.apache.org/jira/browse/HADOOP-3547 to fix
>> the documentation with better examples.
>>
>> Arun
>>
>> On Jun 12, 2008, at 9:01 AM, Arun C Murthy wrote:
>>
>>>
>>> On Jun 12, 2008, at 6:47 AM, montag wrote:
>>>
>>>>
>>>> Hi,
>>>>
>>>> I'm a new Hadoop user, so if this question is blatantly obvious, I
>>>> apologize. I'm trying to load a native shared library using the
>>>> DistributedCache as outlined in
>>>> https://issues.apache.org/jira/browse/HADOOP-1660?
>>>> page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
>>>> HADOOP-1660 .
>>>
>>> The DistributedCache will use the 'fragment' of the URI as the name
>>> of the symlink:
>>> hdfs://namenode:port/lib.so.1#lib.so
>>>
>>> Thus in the above case you will find:
>>> lib.so -> lib.so.1
>>>
>>> Then in your main:
>>> DistributedCache.addCacheFile("hdfs://namenode:port/lib.so.
>>> 1#lib.so", conf);
>>> DistributedCache.createSymLink(conf);
>>>
>>> In the map/reduce task:
>>> System.loadLibrary("lib.so");
>>>
>>> Hope that helps...
>>>
>>> Arun
>>>
>>>> However, when I call System.load() , I continually get an
>>>> "UnsatisfiedLinkException: can't load library " error. I've
>>>> checked the
>>>> java.library.path and LD_LIBRARY_PATH variables, and all seems to
>>>> be in
>>>> order. I've also tried using System.loadLibrary(), but that call
>>>> doesn't
>>>> even appear to find the library.
>>>>
>>>> I have a feeling that I'm not properly creating the symlinks to the
>>>> library within the DistributedCache. Could someone that has
>>>> successfully
>>>> loaded a native library using this functionality possibly provide
>>>> a code
>>>> snippet of how this is done? Currently my code for loading the
>>>> library
>>>> looks like this:
>>>>
>>>> DistributedCache.addCacheFile(libPath.toUri(), conf);
>>>> DistributedCache.setLocalFiles(conf, "lib.so"); //I'm not really
>>>> sure if
>>>> this is necessary
>>>> DistributedCache.createSymlink(conf);
>>>>
>>>> and then within the M/R classes:
>>>>
>>>> Path[] path = DistributedCache.getLocalCacheFiles(conf);
>>>>
>>>> System.load(new File("lib.so").getAbsolutePath());//I've also tried
>>>> System.load(path[0].toString) but that didn't work either.
>>>>
>>>> Is this incorrect? Any help would be greatly appreciated.
>>>>
>>>> Thanks,
>>>> Mike
>>>> --
>>>> View this message in context: http://www.nabble.com/Issue-loading-
>>>> a-native-library-through-the-DistributedCache-
>>>> tp17800388p17800388.html
>>>> Sent from the Hadoop core-user mailing list archive at Nabble.com.
>>>>
>>>
>>
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/Issue-loading-a-native-library-through-the-DistributedCache-tp17800388p17805835.html
Sent from the Hadoop core-user mailing list archive at Nabble.com.