首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

【java学习】Jni在hadoop下的使用(中)

2012-12-26 
【java学习】Jni在hadoop上的使用(中)上一篇博文里,已经在linux环境下实现单机版JNI的验证。这一篇,进入“阶段

【java学习】Jni在hadoop上的使用(中)

上一篇博文里,已经在linux环境下实现单机版JNI的验证。这一篇,进入“阶段二”,将JNI程序放到hadoop上跑通。 


这个阶段的尝试我吃了不少苦头,主要是路径问题:hadoop将我写好的jar包分发到每个tasknode上,同时,我们要把.so也分发到相同路径下,并“告诉”tasknode,使得jvm在运行jar包的时候能够找到这个动态库。


还是按顺序说。写hadoop程序。


map函数:

public void runTestJni (String[] args) throws Exception {//  the configurationConfiguration conf = new Configuration();// conf.set("java.library.path", "./Jars");// DistributedCache.addFileToClassPath(new Path("/xxx/libFakeSegmentForJni.so"), conf);/*conf.set("hadoop.native.lib", "true");conf.set("java.library.path", "./");conf.set("mapred.job.classpath", "./");DistributedCache.createSymlink(conf);DistributedCache.addFileToClassPath(new Path("/xxx/libFakeSegmentForJni.so"), conf);*/GenericOptionsParser goparser = new GenericOptionsParser(conf, args);String otherargs [] = goparser.getRemainingArgs();// the jobJob job;job = new Job(conf, "@xiaojinghui-TestFakeSegmentForJni-hadoopJni");job.setJarByClass(TestFakeSegmentForJni.class);......


可以看到,我在"Job job"之前注释的有多乱。这还是删除了一些绝对不靠谱的尝试语句呢。可想而知,我当时的郁闷。


最后提一句,设置java.library.path失败,有两种说法:

    这是一个bug,至今未解决。大家可以搜搜去,在似乎oracle的一个网站上,有个人遇到了和我一样的问题,似乎是官方人员回答的。这是一个design,当tasknode的jvm一旦运行起来,就没有办法动态更改它的属性了。


参考文献:

《Hadoop JAVA程序-files功能测试》




热点排行