Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 多个Hadoop文件系统实例_Java_Hadoop - Fatal编程技术网

Java 多个Hadoop文件系统实例

Java 多个Hadoop文件系统实例,java,hadoop,Java,Hadoop,我有一个类(为了可读性,我删除了try/catch): 在我的程序中,我首先创建了一个HadoopFileSysem对象,我没有关闭它 然后我创建第二个HadoopFileSysem对象,然后关闭它 最后,当我想在我的第一个对象中使用m_fileSystem上的函数时,我有一个错误:java.io.IOException:fileSystem closed 但我没关! 下面是一个小代码来说明我的问题: HadoopFileSystem h1 = new HadoopFileSystem(); H

我有一个类(为了可读性,我删除了try/catch):

在我的程序中,我首先创建了一个
HadoopFileSysem
对象,我没有关闭它

然后我创建第二个
HadoopFileSysem
对象,然后关闭它

最后,当我想在我的第一个对象中使用
m_fileSystem
上的函数时,我有一个错误:
java.io.IOException:fileSystem closed

但我没关!

下面是一个小代码来说明我的问题:

HadoopFileSystem h1 = new HadoopFileSystem();
HadoopFileSystem h2 = new HadoopFileSystem();

if(h1 == h2)
    System.out.println("=="); // No print
if(h1.equals(h2))
    System.out.println("equals"); // No print

h2.close();
h1.createFile("test.test"); // ERROR : java.io.IOException: Filesystem closed
h1.close();

为什么?

您正在基于硬编码的配置创建对象。这基本上意味着要创建两个相同的对象。因为这些对象是相同的,所以JVM将引用相同的对象。所以h1和h2引用的是同一个对象


这样做的原因是,您将获得一个基于配置文件的对象的现有实例。如果h1和h2的配置不同,它将不再是同一个实例。

m\u fileSystem=fileSystem.get(l\u配置)是一个静态调用,即使创建了两个不同的对象。您需要找到一种方法,使两个不同对象的调用保持静态

试试这个来解决这个问题

conf.setBoolean("fs.hdfs.impl.disable.cache", true);

你能把代码贴在创建Hadoop文件系统和调用函数的地方吗?这个类不太可能包含您正在查找的错误。我刚刚用示例编辑了我的测试:
if(h1==h2)System.out.println(“==”);如果(h1等于(h2))系统输出println(“等于”)和我没有“打印”?@apachee你能删除h2.close()吗;然后再运行一次?如果不先关闭h2,是否仍会出现错误?不,我不会再出现错误。
h2.close()。我怎样才能解决我的问题?为什么
==
什么也不返回?我会用另一个解决问题的建议更新我的答案。这对你有用吗?如果没有,那么我很抱歉,但是我没有主意了:(@apaache也许你可以从那个链接中获得一些信息。祝你好运,对不起,我帮不了你更多的忙。谢谢JtheRocker,这就解释了一切。你有没有办法让它成为非静态的?让我给你回电话。我会想办法的。很好。让我开心。没问题:)对于任何进一步的问题,请看这个:@snooze92:我想是的,在Hadoop2API中:)。我回答了以下可能的版本。
conf.setBoolean("fs.hdfs.impl.disable.cache", true);