libhdfs编译,安装,配置,使用

系统 1479 0

我是把hadoop 0.20.2安装到/opt/hadoop目录下,故 HADOOP_HOME=/opt/hadoop

而我系统安装的是openjdk-1.6.0,主目录 JAVA_HOME= /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64

一、编译

 

        $cd /opt/hadoop
        
$ant compile-c++-libhdfs -Dislibhdfs=true

 

 

二、安装、配置

就是解决gcc寻找头文件、连接动态链接库问题以及环境变量。
其中gcc寻找头文件以及动态链接库可以通过设置环境变量,也可以通过Makefile来完成。
而libhdfs需要用到的JAVA的相关东西只能通过环境变量设置。其实就是CLASSPATH需要必须通过环境变量来设置。

1)环境变量设置(CLASSPATH必须通过这个来设置,其它项可以通过Makefile完成)

GCC寻找头文件方面需要用到的环境变量:
我这个版本libhdfs的头文件hdfs.h在 $HADOOP_HOME/src/c++/libhdfs 下,而libhdfs是基于JNI的,所以JAVA的头文件也在哪也要告诉GCC。
JAVA头文件在$JAVA_HOME/include和$JAVA_HOME/include/linux下。
所以设置环境变量
      HADOOP_HOME=
      
        /opt/hadoop
      
      
JAVA_HOME= /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64

# 此项可以通过Makefile设置
C_INCLUDE_PATH= $HADOOP_HOME/src/c++/libhdfs:$JAVA_HOME/include:$JAVA_HOME/include/linux

 

 
其它环境变量:
在安装JAVA的时候就要设置CLASSPATH变量,其值一般为
        CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      
我们在这基础上,将$HADOOP_HOME/*.jar 以及 $HADOOP_HOME/lib/*.jar 全部添加到CLASSPATH环境变量中。虽然只是用到其中两三个就行了,但我不知道到底是用哪个jar,所以就全部添加了。
 
具体环境变量的设置有两种方法:

a)export设置立即生效,但只当次有效。重启机器需要重新设置环境变量。

        $export HADOOP_HOME=/opt/hadoop
      

其它环境变量设置参照上面命令。

 

b)修改/etc/profile设置环境变量。修改完并非立即生效,而是重启机器后有效,而且以后都有效。

        $gedit /etc/profile


      

 在这个文件中找到一行

        export PATH MAIL USER ...
      

 在这行的前面添加

        JAVA_HOME=
        
          你的JAVA主目录

HADOOP_HOME
        
        =
        
          你的HADOOP主目录


          
        # 此项可以通过Makefile设置
        
          
C_INCLUDE_PATH
= 那些头文件所在目录,用冒号:隔开 # 添加 $HADOOP_HOME /*.jar 到 CLASSPATH变量中 for i in $HADOOP_HOME/*.jar ; do   CLASSPATH=$CLASSPATH:$i done # 添加 $HADOOP_HOME/lib/*.jar 到 CLASSPATH变量中 for i in $HADOOP_HOME/lib/*.jar ; do   CLASSPATH=$CLASSPATH:$i done

 


 在这行的后面添加

        export PATH MAIL USER ... JAVA_HOME HADOOP_HOME C_INCLUDE_PATH


      

 注:其中...表示省略的变量,还有很多变量,各个系统不一样,没必须全面写在这里,而且不是重点。

 

2)动态链接库(可通过Makefile设置)

我这个版本JAVA的动态链接库在$JAVA_HOME/jre/lib/amd64目录下
libhdfs的动态链接库在$HADOOP_HOME/build/c++/Linux-amd64-64/lib目录下
在centos 6中设置动态链接库的方法为
在/etc/ld.so.conf.d/目录下新建一个.conf文件,然后在文件里填入链接库所在目录。
        $gedit /etc/ld.so.conf.d/hdfs.conf


      

在此文件中填入目录

        /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64
        
/opt/hadoop/build/c++/Linux-amd64-64/lib

 保存,退出,然后执行命令使配置文件生效

        $ldconfig


      

 

3)通过Makefile设置相关项

Makefile写法

        #指定hadoop安装目录
        
HADOOP_INSTALL=/opt/hadoop
#使用的平台类型,32位的是Linux-i386-32,64位的是Linux-amd64-64
PLATFORM
=Linux-i386- 32

#JAVA安装目录 JAVA_HOME
= /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
        
          
#寻找头文件的目录
CPPFLAGS
= -I$(HADOOP_INSTALL)/src/c++/ libhdfs -I $(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
#寻找动态链接库的目录
LIB
= -L$(HADOOP_INSTALL)/c++/Linux-i386- 32 /lib/ libjvm =/usr/lib/jvm/java- 6 -openjdk/jre/lib/i386/client/ libjvm.so LDFLAGS += - lhdfs testHdfs: testHdfs.c gcc testHdfs.c $(CPPFLAGS) $(LIB) $(LDFLAGS) $(libjvm) - o testHdfs clean: rm testHdfs

 

Makefile.am的写法

        SUBDIRS=
        
          

HADOOP_INSTALL
        
        =/opt/hadoop
        
          

PLATFORM
        
        =Linux-amd64-
        
          64
        
        
          

JAVA_HOME
        
        =
        
          /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
          
INCLUDES =-I$(HADOOP_INSTALL)/src/c++/libhdfs -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/ linux
LDADD
=-L$(HADOOP_INSTALL)/c++/$(PLATFORM)/ lib -lhdfs
export INCLUDES LDADD

 

 

 

三、使用

测试代码

        /* testLibhdfs.c */
        

#include "hdfs.h" int main(int argc, char **argv) { hdfsFS fs = hdfsConnect("default", 0); const char* writePath = "/tmp/testfile.txt"; hdfsFile writeFile = hdfsOpenFile(fs, writePath, O_WRONLY|O_CREAT, 0, 0, 0); if(!writeFile) { fprintf(stderr, "Failed to open %s for writing!\n", writePath); exit(-1); } char* buffer = "Hello, World!"; tSize num_written_bytes = hdfsWrite(fs, writeFile, (void*)buffer, strlen(buffer)+1); if (hdfsFlush(fs, writeFile)) { fprintf(stderr, "Failed to 'flush' %s\n", writePath); exit(-1); } hdfsCloseFile(fs, writeFile); }

 编译、运行:

        $gcc -o testLibhdfs testLibhdfs.c -lhdfs
        
$./testLibhdfs



libhdfs编译,安装,配置,使用


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论