`
paddy.w
  • 浏览: 497536 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编译libhdfs

阅读更多
        Mysql Applier是Mysql向hdfs进行实时备份的工具。其中用到了libhdfs,是hadoop提供的C语言访问hdfs的接口。以下是编译过程和遇到的问题。

        libhdfs编译过程比较顺利,执行如下命令即可:
ant compile-c++-libhdfs -Dislibhdfs=true


下面的官方提供的例子:
#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);
}


        其中default是hostname,根据需要进行更改。
        执行如下命令进行编译:

gcc testHDFS.c  -I${HADOOP_HOME}/src/c++/libhdfs -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -L${HADOOP_HOME}/c++/Linux-amd64-64/lib/ -lhdfs -L${JAVA_HOME}/jre/lib/amd64/server -ljvm -o testHDFS


        执行的过程中遇到错误:
error while loading shared libraries: libhdfs.so.0: cannot open shared object file: No such file or directory

        或者
error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory


        解决方法有两种:

        1、编辑/etc/ld.so.conf
           在ld.so.conf中添加如下两行:
${HADOOP_HOME}/c++/Linux-amd64-64/lib
${JAVA_HOME}/jre/lib/amd64/server

           其中${HADOOP_HOME}和${JAVA_HOME}分别是hadoop和java的home目录,替换成绝对路径,我没替换貌似不行。
           执行/sbin/ldconfig -v刷新一下cache

        2、编辑.bashrc
           添加如下:
export LD_LIBRARY_PATH=${HADOOP_HOME}/c++/Linux-amd64-64/lib:${JAVA_HOME}/jre/lib/amd64/server

           这个相比方法1要灵活。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics