Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用使用libhdfs的程序时发生loadFileSystems错误_Java_C_Ubuntu_Hadoop - Fatal编程技术网

Java 调用使用libhdfs的程序时发生loadFileSystems错误

Java 调用使用libhdfs的程序时发生loadFileSystems错误,java,c,ubuntu,hadoop,Java,C,Ubuntu,Hadoop,该代码是libhdfs测试代码 int main(int argc, char **argv) { hdfsFS fs = hdfsConnect("hdfs://labossrv14", 9000); const char* writePath = "/libhdfs_test.txt"; hdfsFile writeFile = hdfsOpenFile(fs, writePath, O_WRONLY|O_CREAT, 0, 0, 0); if(!write

该代码是libhdfs测试代码

 int main(int argc, char **argv)
{
    hdfsFS fs = hdfsConnect("hdfs://labossrv14", 9000);
    const char* writePath = "/libhdfs_test.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, libhdfs!";
    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);
}
为了成功编译这段代码,我付出了很多努力,但是当我运行程序时,它就不起作用了。下面是错误消息

loadFileSystems error:
(unable to get stack trace for java.lang.NoClassDefFoundError exception: ExceptionUtils::getStackTrace error.)
hdfsBuilderConnect(forceNewInstance=0, nn=labossrv14, port=9000, kerbTicketCachePath=(NULL), userName=(NULL)) error:
(unable to get stack trace for java.lang.NoClassDefFoundError exception: ExceptionUtils::getStackTrace error.)
hdfsOpenFile(/libhdfs_test.txt): constructNewObjectOfPath error:
(unable to get stack trace for java.lang.NoClassDefFoundError exception: ExceptionUtils::getStackTrace error.)
Failed to open /libhdfs_test.txt for writing!
我根据游戏规则玩这些东西。我发现问题可能是不正确的类路径。 下面是我的类路径,它由“hadoop类路径--glob”生成的类路径和jdk和jre库的路径组合而成

export CLASSPATH=/home/junzhao/hadoop/hadoop-2.5.2/etc/hadoop:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/common/lib/*:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/common/*:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/hdfs:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/hdfs/lib/*:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/hdfs/*:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/yarn/lib/*:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/yarn/*:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/mapreduce/lib/*:/home/junzhao/hadoop/hadoop-2.5.2/share/hadoop/mapreduce/*:/contrib/capacity-scheduler/*.jar:/usr/lib/jvm/java-8-oracle/lib:/usr/lib/jvm/java-8-oracle/jre/lib:$CLASSPATH

有人有好的解决办法吗?谢谢

我再次阅读了教程中的一些信息和之前提出的一些问题。最后,我发现这个问题是由JNI没有扩展类路径中的通配符引起的。所以我把所有JAR放入类路径,问题就解决了。 由于该命令“hadoop classpath--glob”也将生成通配符,因此它解释了

使用通配符语法指定多个JAR无效。 运行hadoop类路径--glob或hadoop类路径可能很有用 --jar为您的部署生成正确的类路径

我昨天误解了这一段


另请参见和

是否已安装java?例如,它是否完全设置为可以在线运行java应用程序?发布的代码似乎缺少某些调用,例如断开与DNS服务器的连接。通常,连接到DNS服务器等服务器时,需要用户名和密码。在发布的代码中,这些字段设置为NULL。这可能是连接函数失败的原因。该问题是由JNI的类路径引起的。我已经弄明白了。谢谢