libhdfs编译,安装,配置,使用
2012-03-15 16:34
441 查看
我是把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
其中gcc寻找头文件以及动态链接库可以通过设置环境变量,也可以通过Makefile来完成。
而libhdfs需要用到的JAVA的相关东西只能通过环境变量设置。其实就是CLASSPATH需要必须通过环境变量来设置。
我这个版本libhdfs的头文件hdfs.h在 $HADOOP_HOME/src/c++/libhdfs 下,而libhdfs是基于JNI的,所以JAVA的头文件也在哪也要告诉GCC。
JAVA头文件在$JAVA_HOME/include和$JAVA_HOME/include/linux下。
所以设置环境变量
其它环境变量:
在安装JAVA的时候就要设置CLASSPATH变量,其值一般为
我们在这基础上,将$HADOOP_HOME/*.jar 以及 $HADOOP_HOME/lib/*.jar 全部添加到CLASSPATH环境变量中。虽然只是用到其中两三个就行了,但我不知道到底是用哪个jar,所以就全部添加了。
具体环境变量的设置有两种方法:
其它环境变量设置参照上面命令。
在这个文件中找到一行
在这行的前面添加
在这行的后面添加
注:其中...表示省略的变量,还有很多变量,各个系统不一样,没必须全面写在这里,而且不是重点。
libhdfs的动态链接库在$HADOOP_HOME/build/c++/Linux-amd64-64/lib目录下
在centos 6中设置动态链接库的方法为
在/etc/ld.so.conf.d/目录下新建一个.conf文件,然后在文件里填入链接库所在目录。
在此文件中填入目录
保存,退出,然后执行命令使配置文件生效
Makefile.am的写法
编译、运行:
而我系统安装的是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
相关文章推荐
- HDFS C++接口――libhdfs的编译、配置、使用
- HDFS C++接口——libhdfs的编译、配置、使用
- Boost下载安装编译配置使用指南(含Windows、Linux以及ARM Linux)
- Boost下载安装编译配置使用指南
- C# clr 存储过程例子(完整从:编译到配置到存储过程的安装部署到使用)
- nginx的yum安装,基本参数使用,编译参数说明和Nginx基本配置,模块安装
- Boost下载安装编译配置使用指南(含Windows和Linux)
- QT使用MySql的配置(使用addLibraryPath载入插件),编译QT的MySql驱动问题及解决方案(自己使用libmysql.lib进行编译mysql.pro,万不得已可以查看Makefile.Debug以解决问题)
- Boost下载安装编译配置使用指南(含Windows和Linux)
- Boost下载安装编译配置使用指南
- (转)Boost 下载 安装 编译 配置 使用 指南
- OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行
- Boost下载安装编译配置使用指南
- Boost下载安装编译配置使用指南
- win7下caffe的编译(包括caffe_python接口配置)以及python27下numpy、matplotlib、scipy等的安装
- HDFS安装、配置以及基本使用
- Sass/SCSS(关系,安装,webstorm配置编译,使用,语法)
- [转载] Boost下载安装编译配置使用指南(含Windows、Linux以及ARM Linux)
- Boost下载安装编译配置使用指南(含Windows和Linux)
- 在VMWare Workstation上使用RedHat Linux安装和配置Hadoop群集环境05_HDFS文件系统和Mapreduce框架的启动和运行