hadoop1.2.1 C 编程环境配置

一、环境

操作系统:centos 6.3 64bits

Hadoop版本:1.0.4

本文假设Hadoop的安装目录为<Hadoop>,Java的安装目录为<Java>


二、编译:

在<Hadoop>目录下,执行

1
ant compile-c++-libhdfs -Dislibhdfs= true


三、配置

主要解决g++ 寻找头文件和动态链接库的问题。

1、头文件

libhdfs的头文件hdfs.h在目录<Hadoop>/src/c++/libhdfs下,因此需要告知头文件路径。

由于libhdfs是基于JNI的,所以Java的头文件也要告知g++,分别为<Java>/include <Java>/include/linux。


2、动态链接库

Java的动态链接库在<Java>/jre/lib/amd64/server,编译时需要加-ljvm

hdfs的动态链接库在<Hadoop>/c++/Linux-amd64-64/lib/,编译时需要加-lhdfs


3、设置必要的环境变量

sudo vim /etc/profile,加入下列内容

1
2
3
4
5
6
7
8
9
10
# JAVA
export JAVA_HOME= /usr/lib/java/jdk1 .7.0_40
export JRE_HOME=${JAVA_HOME} /jre
export CLASSPATH=.:${JAVA_HOME} /lib :${JRE_HOME} /lib
export PATH=$PATH:${JAVA_HOME} /bin
                                              
# HADOOP HDFS CPLUS
export HADOOP_DIR= /home/wm/work/hadoop/hadoop-1 .0.4
export LD_LIBRARY_PATH=${JAVA_HOME} /jre/lib/amd64/server
export CLASSPATH=$CLASSPATH:${HADOOP_DIR} /lib/commons-lang-2 .4.jar:${HADOOP_DIR} /lib/commons-logging-api-1 .0.4.jar:${HADOOP_DIR} /lib/commons-configuration-1 .6.jar:${HADOOP_DIR} /hadoop-core-1 .0.4.jar:${HADOOP_DIR} /contrib/streaming/hadoop-streaming-1 .0.4.jar


其中“# JAVA”部分,应当是安装配置JAVA时就设置的;“# HADOOP HDFS CPLUS”部分是专门位libhdfs设置的。编辑之后,记得source /etc/profile。

设置环境变量是为了让程序在运行时,找到链接库和java的相关class,所以主要是设置LD_LIBRARY_PATH和CLASSPATH。


四、使用hdfs,运行测试程序

1、编写测试源码

从官网上找到sample,testHDFS.cpp。代码大意是在hdfs添加文件/tmp/testfile.txt,内容为“Hello, World!”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "hdfs.h"
int main( int argc, char **argv) {
     // @param: host, port
     // hdfsFS fs = hdfsConnect("default", 0);
     hdfsFS fs = hdfsConnect( "127.0.0.1" , 9000);
     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);
     return 0;
}


2、编译运行

执行下列执行编译

1
g++ testHdfs.cpp  -I<Hadoop> /src/c ++ /libhdfs -I<Java> /include -I<Java> /include/linux -L<Hadoop> /c ++ /Linux-amd64-64/lib/ -lhdfs -L<Java> /jre/lib/amd64/server -ljvm -o testHdfs


指令看起来有点繁杂,其实就是告知g++头文件和动态链接库的位置,具体内容在上文已经讲解。

<Hadoop> <Java>变为我本机实际的安装路径,则编译指令如下:(很长。。)

1
g++ testHdfs.cpp  -I /home/wm/work/hadoop/hadoop-1 .0.4 /src/c ++ /libhdfs -I /usr/lib/java/jdk1 .7.0_40 /include -I /usr/lib/java/jdk1 .7.0_40 /include/linux -L /home/wm/work/hadoop/hadoop-1 .0.4 /c ++ /Linux-amd64-64/lib/ -lhdfs -L /usr/lib/java/jdk1 .7.0_40 /jre/lib/amd64/server -ljvm -o testHdfs


当然,为了使用方便,大家也可以根据上述指令写自己的Makefile。我在工程中使用CMake,因此就不用写Makefile。这里就不贴出CMake具体文档了,本质都差不多,就是设置头文件路径、动态链接库路径等。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值