【问题标题】:Hadoop Exception java.lang.NoSuchMethodError when calling hdfsOpenFile in hdfs C API在 hdfs C API 中调用 hdfsOpenFile 时出现 Hadoop 异常 java.lang.NoSuchMethodError
【发布时间】:2016-08-26 15:16:02
【问题描述】:

首先,我使用 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 function list

有人知道发生了什么吗?

【问题讨论】:

    标签: apache hadoop java-native-interface hdfs libhdfs


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2020-05-07
      • 2021-10-16
      相关资源
      最近更新 更多