java - 如何在hadoop map reduce中设置使用JNI创建的库文件的路径

标签 java c hadoop java-native-interface

我在我的映射器代码中使用了本地方法。

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 中,类似的功能称为“资源本地化”)。请参阅以下内容以获取帮助:

Stackoverflow yahoo tutorial

关于java - 如何在hadoop map reduce中设置使用JNI创建的库文件的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26083568/

相关文章:

java - 使用 mysql-connector-java jdbc 驱动程序 8.0.18 为 MySQL 8 服务器获取时间戳列的错误值

java - 在 libgdx 中使用通用补间引擎添加补间?

java - 如何从 main 方法启动 Vertx 3 Verticle?

无法弄清楚如何在我的客户端-服务器模型中实现线程

java - HBase Java 客户端不工作(MasterNotRunningException 异常)

java - 搜索出现\

用C调用汇编代码,输出错误

c - 在 C 中的变量中设置特定位的最佳方法是什么

hadoop - pig 为什么叫批处理

hadoop - 无需Hadoop命令即可运行Hadoop Java代码