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

Java 在HDFS上使用libhdfs进行文件i/o,java,hadoop,hdfs,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::getS

我想使用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文件,在这里和这里发现了类似的问题,试图解决它们,但没有成功。下面是我设置为CLASSPATH env变量的内容

CLASSPATH=$HADOOP_HOME/share/HADOOP/common/:$HADOOP_HOME/share/HADOOP/hdfs/:$HADOOP_HOME/share/HADOOP/纱线/:$HADOOP_HOME/share/HADOOP/mapreduce/:$HADOOP_HOME/share/httpfs/:$HADOOP_HOME/share/HADOOP/tools/


我在这里遗漏了什么?

嗯,我发现jar文件并不是通过在类路径中指定它们的根目录来链接的。我必须显式地将$HADOOP_HOME/share/HADOOP/common/lib中的所有jar文件以及hdfs文件夹中的其他jar文件的路径添加到CLASSPATH env变量中

为此编写了一个简单的python脚本,一切正常。下面是脚本的外观

!/usr/bin/python 导入操作系统

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

操作系统环境['CLASSPATH']='temp_path' listFiles=[] 列表\u文件=

对于os.walkPATH中的根目录、目录、文件名: 对于文件中的名称\u name: 如果名称为.jar: path=os.path.joinroot,名称 列表_文件+=':'+路径

打印列表文件

os.environ['CLASSPATH']=os.environ['CLASSPATH']+列表文件

打印操作系统环境['CLASSPATH']