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之前,需要先编译libhdfs库。这一步骤确保了HDFS客户端可以在文件系统层面上操作。 1. 进入Hadoop所在的目录。 2. 使用ant编译libhdfs库。 ```bash $ANT_HOME/bin/ant compile-c++-libhdfs -...
2. **编译和链接**:将libhdfs.so添加到TensorFlow的编译路径中,并配置编译选项,确保在编译TensorFlow时链接上libhdfs。 3. **配置环境**:设置环境变量,如`HADOOP_HOME`指向Hadoop安装目录,`LD_LIBRARY_PATH`...
总结,libhdfs在Windows 64位环境下的构建是一项涉及多个步骤的任务,包括获取源码、配置CMake、使用Visual Studio编译,以及最终的集成和测试。通过这一过程,开发者能够充分利用libhdfs的功能,实现跨平台的HDFS...
它还具有较少的配置和各种安全设置问题,并且不需要复杂的libhdfs3构建过程。 因此,建议所有对hdfs3有麻烦的用户尝试使用pyarrow。旧的自述文件hdfs3是libhdfs3的轻量级Python包装器, 是与Hadoop File System...
例如,它包含了如libhdfs这样的组件,这是一个Java Native Interface (JNI) 库,允许Java应用程序直接访问HDFS文件系统,从而避免了Java虚拟机(JVM)的开销。 在CentOS 6.5环境下编译Hadoop的native包,通常需要...
为了能够运行 libhdfs 基准测试,请在编译时指定包含目录和库路径: $ cd libhdfs-benchmark $ mkdir build $ cd build $ cmake -DLIBHDFS_INCLUDE_DIR=/usr/local/include/hdfs -DLIBHDFS_LIBRARY=/usr/local/lib/...
这个压缩包包含的文件如`libhadoop.so.1.0.0`、`libhdfs.so.0.0.0`等,都是Hadoop的动态链接库,它们实现了与操作系统交互的底层功能。而`libsnappy.so.1.2.0`、`libsnappy.a`等则是Snappy压缩库的实现。 4. **编译...
在这个场景下,`makefile`会包含如何使用gcc或g++来编译C程序,链接libhdfs库,并处理任何依赖项。你可能需要在`makefile`中指定libhdfs库的路径,例如-L参数来指定库目录,-lhdfs来链接库。 4. 编程接口:libhdfs...
本人经过4个小时顺利将hadoop官方的32位编译为64位,通过测试可用,方便在64位linux安装hadoop的用户使用,编译时间很长,也很苦啊,解决了很多报错的问题,所以分多要一点,还望理解! 注:*****因为本人CSDN等级...
文件列表中只有一个条目"native",这可能意味着压缩包内包含了一个或多个编译好的本地库文件,这些文件可能有特定的命名规则,如libhdfs_compression_NativeXYZ.so,其中"XYZ"代表不同的压缩算法。用户在使用这些库...
Hadoop的原生库通常包含如libhdfs、libhadoop等关键组件,它们使得Hadoop能够直接与本地文件系统交互,提供更高效的数据读写性能。 编译Hadoop native库的过程涉及多个步骤,包括配置环境、设置编译选项、解决依赖...
使用本机库(即,maven配置文件-Pnative )编译的Hadoop 如果需要更多说明,请参考 。 用法 将此添加到您的Cargo.toml: [ dependencies ] hdfs = " 0.0.4 " 这到你的板条箱根: extern crate hdfs; hdfs-rs使用...
Ambari+Bigtop 一站式编译和部署解决方案 https://gitee.com/tt-bigdata/ambari-env
Ambari+Bigtop 一站式编译和部署解决方案 https://gitee.com/tt-bigdata/ambari-env
编译中 $ cd hdfs-benchmark $ mkdir build $ cd build $ cmake .. 如果将Hadoop安装在/usr/local/hadoop或Clouderas Hadoop发行版(CDH)中,则不带参数运行$ cmake ..通常会找到Hadoop提供的libhdfs。 为了链接到...
这些本地库(native libraries)包括如libhdfs、libssl和libcrypto等,它们为Hadoop提供了与操作系统交互的能力,例如处理文件系统操作、网络通信等。macOS系统特有的构建环境和依赖库可能与标准的Hadoop发行版不...
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 64位编译后的成果,native目录 libhadoop.a libhadoop.so libhadoop.so.1.0.0 libhadooppipes.a libhadooputils.a libhdfs.a libhdfs.so libhdfs.so.0.0.0
4. **libnativetask.a** 和 **libhadooppipes.a**、**libhadoop.a**、**libhadooputils.a**、**libhdfs.a**:这些都是静态库文件,用于在编译Hadoop相关程序时链接到这些库,从而在没有动态库的情况下也可以运行程序...
1. libhdfs:Hadoop的本地文件系统接口,允许Java应用程序直接访问HDFS,而无需通过Hadoop的Java API。 2. libhadoop.so:Hadoop的动态链接库,包含了C++编写的原生代码。 3. 其他辅助库:如libz、libssl和libcrypto...