我在我的映射器代码中使用了本地方法。
class Map extends Mapper<LongWritable, Text, LongWritable, Text>{
static{
System.loadLibrary("myjni");
}
public native String getRow(String record, String query);
public void map(...){
//...
}
}
我执行了所有必要的步骤来创建 JNI 库文件 - .so
。而且我还把这个.so
文件复制到了hdfs。但是 hadoop 仍然没有识别路径。它给出了一个错误 - no myjni in java.libarary.path.
如何让mapper知道原生库文件的路径。 请帮忙。谢谢。
最佳答案
除了明确设计为 HDFS 感知的软件外,HDFS 中的文件基本上是未知的。特别是,Java 及其类加载器对 HDFS 一无所知。要使基于 HDFS 的文件出现在 native 文件系统中以用于此类用途,请在您的 MapReduce 作业中使用“DistrubutedCache”API。这是一种将基于 HDFS 的文件和存档缓存到本地文件系统的机制(在 YARN 中,类似的功能称为“资源本地化”)。请参阅以下内容以获取帮助:
关于java - 如何在hadoop map reduce中设置使用JNI创建的库文件的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26083568/