1

我正在尝试getUsed()在类中使用该函数FileSystem

Configuration l_configuration = new Configuration();

l_configuration.set("fs.default.name", "hdfs://localhost:9100");
l_configuration.set("mapred.job.tracker", "localhost:9101");
l_configuration.setBoolean("fs.hdfs.impl.disable.cache", true);

FileSystem l_fileSystem = FileSystem.get(l_configuration);

long size = 0;
size = l_fileSystem.getUsed();

System.out.println("Total size : "+size); // Total size : 0

但我确定我的 HDFS 中有一些文件。如果我执行以下命令外壳:

$ hadoop dfs -dus
hdfs://localhost:9100/user/xxx/yyy  358873405

如何使用该getUsed()功能?

4

3 回答 3

1

您需要考虑 DistributedFileSystem 而不是 FileSystem 才能正确获取大小。

将以下内容替换为,

FileSystem l_fileSystem = FileSystem.get(l_configuration);

long size = 0;
size = l_fileSystem.getUsed();

有了这个,

DistributedFileSystem l_fileSystem = (DistributedFileSystem) DistributedFileSystem.get(l_configuration);

long size = 0;
size = l_fileSystem.getDiskStatus().getUsed();
于 2013-07-23T17:48:47.050 回答
1

getUsed() 函数:

public long getUsed(){      

    long l_used = 0;
    FileStatus[] files = m_fileSystem.listStatus(new Path("/"));
    for (FileStatus file : files)
        l_used += file.getLen();

    return l_used;

}

我认为 Cygwin 安装不支持路径“/”。所以我重写了函数:

public long sizePath(String a_path) throws IOException{     

    long l_used = 0;
    FileStatus[] files = m_fileSystem.listStatus(new Path(a_path));
    for (FileStatus file : files)
        l_used += file.getLen();

    return l_used;

}

我可以在 HDFS 中调整特定文件夹的大小。

于 2013-07-24T13:26:44.690 回答
0

你可以修改你的代码如下:

Configuration l_configuration = new Configuration();

l_configuration.set("fs.default.name", "hdfs://localhost:9100");
l_configuration.set("mapred.job.tracker", "localhost:9101");
l_configuration.setBoolean("fs.hdfs.impl.disable.cache", true);
try{
    FileSystem l_fileSystem = FileSystem.get(l_configuration);
}
catch (IOException e)
{
    System.out.println(e);
}

long size = 0;
size = l_fileSystem.getUsed();

System.out.println("Total size : "+size); // Total size : 0

阅读文档后,除了 FileSystem 初始化时的异常之外,我没有看到任何其他原因。

于 2013-07-23T16:09:06.553 回答