0

嗨,我想从Hadoop我的 java 程序中获取用户和组列表。有没有办法从它那里得到它API?我google了很多,还没有找到任何东西。:(

4

2 回答 2

0

我不确定 API,但获取信息的一种可靠方法是使用离线图像查看器来解析名称节点的 fsimage 并以 XML 格式获取信息。然后,您可以使用简单的 java API 来解析 xml 并获取用户和组的列表。

有用的链接 a) http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html b) https://github.com/twitter/hdfs-du

于 2013-06-19T09:03:17.073 回答
0

您可以从 hdfs://localhost:8020/user 获取所有用户,并使用 Groups 为这些用户获取组(通过 ShellBasedUnixGroupsMapping 服务)

这是代码

    public class Sample {
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        conf.addResource(new Path("/path/to/core-site.xml"));
        conf.addResource(new Path("/path/to/hdfs-site.xml"));
        Groups g = new Groups(conf);

        FileSystem fs = FileSystem.get(conf);

        FileStatus[] files = fs.listStatus(new Path("/user"));
        for (FileStatus f : files) {
            Path p = f.getPath();


            try {
                List<String> gs = g.getGroups(p.getName());
                if (gs != null) {
                    System.out.println(p.getName() + " === " + gs.toString());
                }
            } catch (Exception e) {
                System.out.println("No groups found for " + p.getName());
            }
        }

    }
}

java -cp myjar.jar:/usr/lib/hadoop-hdfs/hadoop-hdfs.jar com.tools.Sample
于 2013-06-19T17:57:19.403 回答