在Spark中使用JNI

Spark程序使用C++或C库,会出现Exception in thread "main" java.lang.UnsatisfiedLinkError: CalClass.intMethod(I)I的问题

原因:Spark程序找不到C++/C程序编译后的.so库

方案1: 打包 class 文件为 jar ,然后 .so 文件和 jar 文件一起提交,并且指定 java.library.path (建议采用, 由@eln提供)

方案2: 将Libxx.so放到Spark默认能看到的库目录下,如/usr/java/packages/lib/amd64、/usr/lib64、/lib64、/lib或/usr/lib中,(实现复杂,涉及env环境变量配置,)

 

注意点:

需要在各个节点(如foreach)中加载C++类模块System.loadLibrary("CalClass")、创建类实例val sample = new CalClass(1.0, 1)后,才可以使用给实例的方法val lastf = sample.intMethod(lsval)

 

[1] how to use jni in spark? http://stackoverflow.com/questions/21106548/how-to-use-jni-in-spark

你可能感兴趣的:(在Spark中使用JNI)