首先,我使用 mvn 构建了 hadoop-2.7.2,并正确设置了环境变量。然后我试图在Apache网站上运行这个简单的例子:C API libhdfs example code
#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);
}
然后我收到如下错误消息:
$ 找不到从类 org/apache/hadoop/fs/FileSystem 中创建带有签名的方法 (Lorg/apache/hadoop/fs/Path;Lorg/apache/hadoop/fs/permission/FsPermission;ZISJILorg/apache/hadoop/util/ Progressable;Z)Lorg/apache/hadoop/fs/FSDataOutputStream;
$ 线程“main”中的异常 java.lang.NoSuchMethodError: create
$ 调用 org.apache.hadoop.conf.FileSystem::create((Lorg/apache/hadoop/fs/Path;Lorg/apache/hadoop/fs/permission/FsPermission;ZISJILorg/apache/hadoop/util/Progressable;Z )Lorg/apache/hadoop/fs/FSDataOutputStream;) 失败!
但我确实可以在 org.apache.hadoop.fs.FileSystem 中找到“创建”函数: org.apache.hadoop.fs.FileSystem 函数列表
有人知道发生了什么吗?