0

首先,我使用 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 函数列表

有人知道发生了什么吗?

4

1 回答 1

0

我不得不在这里承认我的愚蠢问题。我在链接定义中包含了错误的依赖项。所以我的程序试图从另一个库调用错误的 create() ......现在我可以使用所有开源的 hdfs API。

于 2016-08-26T07:16:02.563 回答