2014-09-12 64 views
1

我想使用libhdfs寫入和讀取HDFS。我有發行版本hadoop2.5.0。我試圖做的是編譯和運行他們提供的代碼作爲測試,代碼編譯好,這是我做的在HDFS上使用libhdfs作爲文件I/O

gcc -I/usr/lib/jvm/java-7-openjdk- amd64/include test/test_libhdfs_ops.c -o test.o -lhdfs -L。

但每當我試圖運行它,我得到以下錯誤,

無法得到java.lang.NoClassDefFoundError異常堆棧跟蹤:ExceptionUtils ::的getStackTrace錯誤。

我意識到它無法鏈接到一些Java類的jar文件,發現類似的問題在這裏Writing files in hdfs in C++ (libhdfs)和這裏Hadoop 2.0 JAR files,試圖解決它們,但沒有成功。這裏是我設置爲我的CLASSPATH環境變量

CLASSPATH = $ HADOOP_HOME /股/的Hadoop /普通/ :$ HADOOP_HOME /股/的Hadoop/HDFS/:$ HADOOP_HOME /股/的Hadoop /紗/ :$ HADOOP_HOME /股/的Hadoop/MapReduce的/:$ HADOOP_HOME /股/的Hadoop/httpfs/:$ HADOOP_HOME /股/的Hadoop /工具/

缺少什麼我在這裏?

回答

0

那麼,我發現jar文件並沒有簡單地通過在CLASSPATH中指定它們的根目錄來鏈接。我不得不將$ HADOOP_HOME/share/hadoop/common/lib中的所有jar文件的路徑以及hdfs文件夾中的其他文件的路徑添加到CLASSPATH env變量中。

寫了一個簡單的python腳本來做到這一點,一切正常。下面是腳本的外觀

!在/ usr/bin中/ Python的

進口OS

PATH = '路徑/到/你/ JAR /文件/目錄/'

os.environ [ 'CLASSPATH'] = 'temp_path'

listFiles = [] list_file = ''

爲根,顯示目錄,FILE_NAME在os.walk(PATH): 用於命名在file_name中: 如果 「的.jar」 在名稱: 路徑= os.path.join(根,名稱) list_file + = ':' +路徑

打印list_file

os.environ [」 CLASSPATH'] = os.environ ['CLASSPATH'] + list_file

print os.environ ['CLASSPATH']