在HDFS上使用libhdfs进行文件i / o

时间:2014-09-12 12:49:32

标签: java hadoop hdfs

我想使用libhdfs写入和读取HDFS。我有发布版本hadoop2.5.0。我要做的是编译并运行他们提供的代码作为测试,代码编译得很好,这就是我做的事情

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 env变量

的内容

CLASSPATH = $ HADOOP_HOME /共享/ hadoop的/普通/ :$ HADOOP_HOME /共享/ hadoop的/ HDFS / :$ HADOOP_HOME /共享/ hadoop的/纱线/ :$ HADOOP_HOME /共享/ Hadoop的/ MapReduce的/ 的:$ HADOOP_HOME /股/的Hadoop / httpfs / :$ HADOOP_HOME /股/的Hadoop /工具/

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

好吧,我发现jar文件只是通过在CLASSPATH中指定它们的根目录而没有链接。我必须将$ HADOOP_HOME / share / hadoop / common / lib中所有jar文件的路径以及hdfs文件夹中的其他文件路径显式添加到CLASSPATH env变量中。

写了一个简单的python脚本来做到这一点,一切正常。以下是脚本的外观

!在/ usr / bin中/ Python的

导入os

PATH =' path / to / your / jar / files / dir /'

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

listFiles = [] list_file =''

对于os.walk(PATH)中的root,dirs,file_name:     对于file_name中的名称:         如果" .jar"在名字中:             path = os.path.join(root,name)             list_file + =':' +路径

print list_file

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

print os.environ [' CLASSPATH']