我是把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
一、編譯
?
$cd /opt/hadoop
$ant compile-c++-libhdfs -Dislibhdfs=true
?
?
二、安裝、配置
1)環境變量設置(CLASSPATH必須通過這個來設置,其它項可以通過Makefile完成)
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
?
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.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設置)
$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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

