Hi Stuart,
Hadoop itself doesn't have any nice way of dealing with this that I know of.
I think your best bet is to do something like:
String dataModel = System.getProperty("sun.arch.data.model");
if ("32".equals(dataModel)) {
System.loadLibrary("mylib_32bit");
} elseif ("64".equals(dataModel)) {
System.loadLibrary("mylib_64bit");
} else {
throw new RuntimeException("Unknown data model: " +
String.valueOf(dataModel));
}
Then include your libraries as libmylib_32bit.so and libmylib_64bit.so in
the distributed cache.
Hope that helps
-Todd
On Fri, Jul 10, 2009 at 12:19 PM, Stuart White <[email protected]>wrote:
> My hadoop cluster is a combination of i386-32bit and amd64-64bit machines.
> I have some native code that I need to execute from my mapper. I have
> different native libraries for the different architectures.
>
> How can I accomplish this? I've looked at using -files or DistributedCache
> to push the native libraries to the nodes, but I can't figure out how to
> make sure I link against the correct native library (for the architecture
> the map task is running on).
>
> Anyone else run into this? Any suggestions?
>