我想使用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 /工具/ 的
我在这里缺少什么?
答案 0 :(得分:0)
好吧,我发现jar文件只是通过在CLASSPATH中指定它们的根目录而没有链接。我必须将$ HADOOP_HOME / share / hadoop / common / lib中所有jar文件的路径以及hdfs文件夹中的其他文件路径显式添加到CLASSPATH env变量中。
写了一个简单的python脚本来做到这一点,一切正常。以下是脚本的外观
导入os
PATH =' path / to / your / jar / files / dir /'
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']