`
paddy.w
  • 浏览: 505008 次
  • 性别: 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要灵活。
分享到:
评论

相关推荐

    如何编译fuse-dfs

    在编译fuse-dfs之前,需要先编译libhdfs库。这一步骤确保了HDFS客户端可以在文件系统层面上操作。 1. 进入Hadoop所在的目录。 2. 使用ant编译libhdfs库。 ```bash $ANT_HOME/bin/ant compile-c++-libhdfs -...

    libhdfs.so.zip

    2. **编译和链接**:将libhdfs.so添加到TensorFlow的编译路径中,并配置编译选项,确保在编译TensorFlow时链接上libhdfs。 3. **配置环境**:设置环境变量,如`HADOOP_HOME`指向Hadoop安装目录,`LD_LIBRARY_PATH`...

    libhdfs-win64:64 位窗口的 libhdfs(基于 Hadoop 2.6.0)

    总结,libhdfs在Windows 64位环境下的构建是一项涉及多个步骤的任务,包括获取源码、配置CMake、使用Visual Studio编译,以及最终的集成和测试。通过这一过程,开发者能够充分利用libhdfs的功能,实现跨平台的HDFS...

    hdfs3:libhdfs3的包装器,可与Python的HDFS交互

    它还具有较少的配置和各种安全设置问题,并且不需要复杂的libhdfs3构建过程。 因此,建议所有对hdfs3有麻烦的用户尝试使用pyarrow。旧的自述文件hdfs3是libhdfs3的轻量级Python包装器, 是与Hadoop File System...

    hadoop-2.5.0-cdh5.3.6 编译native包

    例如,它包含了如libhdfs这样的组件,这是一个Java Native Interface (JNI) 库,允许Java应用程序直接访问HDFS文件系统,从而避免了Java虚拟机(JVM)的开销。 在CentOS 6.5环境下编译Hadoop的native包,通常需要...

    libhdfs-benchmark:libhdfs 基准测试

    为了能够运行 libhdfs 基准测试,请在编译时指定包含目录和库路径: $ cd libhdfs-benchmark $ mkdir build $ cd build $ cmake -DLIBHDFS_INCLUDE_DIR=/usr/local/include/hdfs -DLIBHDFS_LIBRARY=/usr/local/lib/...

    hadoop2.5.0 snappy编译jar包

    这个压缩包包含的文件如`libhadoop.so.1.0.0`、`libhdfs.so.0.0.0`等,都是Hadoop的动态链接库,它们实现了与操作系统交互的底层功能。而`libsnappy.so.1.2.0`、`libsnappy.a`等则是Snappy压缩库的实现。 4. **编译...

    c 操作hdfs

    在这个场景下,`makefile`会包含如何使用gcc或g++来编译C程序,链接libhdfs库,并处理任何依赖项。你可能需要在`makefile`中指定libhdfs库的路径,例如-L参数来指定库目录,-lhdfs来链接库。 4. 编程接口:libhdfs...

    hadoop-2.2.0.tar.gz 64位 part1 hadoop源码包编译为linux64位版本

    本人经过4个小时顺利将hadoop官方的32位编译为64位,通过测试可用,方便在64位linux安装hadoop的用户使用,编译时间很长,也很苦啊,解决了很多报错的问题,所以分多要一点,还望理解! 注:*****因为本人CSDN等级...

    native编译好的.zip

    文件列表中只有一个条目"native",这可能意味着压缩包内包含了一个或多个编译好的本地库文件,这些文件可能有特定的命名规则,如libhdfs_compression_NativeXYZ.so,其中"XYZ"代表不同的压缩算法。用户在使用这些库...

    64位 macOS High Sierra 10.13.2 编译的hadoop 2.8.3 native

    Hadoop的原生库通常包含如libhdfs、libhadoop等关键组件,它们使得Hadoop能够直接与本地文件系统交互,提供更高效的数据读写性能。 编译Hadoop native库的过程涉及多个步骤,包括配置环境、设置编译选项、解决依赖...

    hdfs-rs:用于Rust的libhdfs绑定和包装API

    使用本机库(即,maven配置文件-Pnative )编译的Hadoop 如果需要更多说明,请参考 。 用法 将此添加到您的Cargo.toml: [ dependencies ] hdfs = " 0.0.4 " 这到你的板条箱根: extern crate hdfs; hdfs-rs使用...

    hadoop_3_2_0-libhdfs-3.3.4-1.el7.x86_64.rpm

    Ambari+Bigtop 一站式编译和部署解决方案 https://gitee.com/tt-bigdata/ambari-env

    hadoop_3_2_0-libhdfs-devel-3.3.4-1.el7.x86_64.rpm

    Ambari+Bigtop 一站式编译和部署解决方案 https://gitee.com/tt-bigdata/ambari-env

    hdfs-benchmark:适用于CC ++的HDFS库的微基准测试

    编译中 $ cd hdfs-benchmark $ mkdir build $ cd build $ cmake .. 如果将Hadoop安装在/usr/local/hadoop或Clouderas Hadoop发行版(CDH)中,则不带参数运行$ cmake ..通常会找到Hadoop提供的libhdfs。 为了链接到...

    hadoop-3.1.3-mac-native_lib.zip

    这些本地库(native libraries)包括如libhdfs、libssl和libcrypto等,它们为Hadoop提供了与操作系统交互的能力,例如处理文件系统操作、网络通信等。macOS系统特有的构建环境和依赖库可能与标准的Hadoop发行版不...

    hadoop native

    hadoop 64位编译后的成果,native目录 libhadoop.a libhadoop.so libhadoop.so.1.0.0 libhadooppipes.a libhadooputils.a libhdfs.a libhdfs.so libhdfs.so.0.0.0

    hadoop 2.2.0 native

    hadoop 64位编译后的成果,native目录 libhadoop.a libhadoop.so libhadoop.so.1.0.0 libhadooppipes.a libhadooputils.a libhdfs.a libhdfs.so libhdfs.so.0.0.0

    native(hadoop-2.5.0-cdh5.2.0).tar

    4. **libnativetask.a** 和 **libhadooppipes.a**、**libhadoop.a**、**libhadooputils.a**、**libhdfs.a**:这些都是静态库文件,用于在编译Hadoop相关程序时链接到这些库,从而在没有动态库的情况下也可以运行程序...

    hadoop2.4.1的64位centos的native包

    1. libhdfs:Hadoop的本地文件系统接口,允许Java应用程序直接访问HDFS,而无需通过Hadoop的Java API。 2. libhadoop.so:Hadoop的动态链接库,包含了C++编写的原生代码。 3. 其他辅助库:如libz、libssl和libcrypto...

Global site tag (gtag.js) - Google Analytics