UserPrivilegedException,同时通过JAVA在HDFS中作为特定用户创建目录

时间:2015-02-23 09:22:27

标签: apache hadoop hdfs file-permissions

我正在使用CDH 4.7。我正在尝试在/ user / cloudera中的HDFS中创建一个文件夹。但抛出了UserPrivilegedException。下面是我的代码(#copied)

public static void main(String args []){

        try {

        UserGroupInformation ugi = 
                UserGroupInformation.createProxyUser("cloudera", UserGroupInformation.getLoginUser());

        System.out.println(ugi.getUserName());
        ugi.doAs(new PrivilegedExceptionAction<Void>() {

            public Void run() throws Exception {
                System.out.println("aaa");
                Configuration conf = new Configuration();
                conf.set("fs.defaultFS", "hdfs://localhost.localdomain:8020/user/cloudera");
                conf.set("hadoop.job.ugi", "cloudera");


                FileSystem fs = FileSystem.get(conf);

                fs.createNewFile(new Path("/user/cloudera/test"));
                Path path = new Path("/user/cloudera/Hbasesyntax.txt");

                FileStatus[] status = fs.listStatus(path);
                for(int i=0;i<status.length;i++){
                    System.out.println(status[i].getPath());
                }
                return null;
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

然后,我甚至尝试访问通过终端输入的文件(Hbasesyntax.txt)。但是,也无法从中获取文件信息。我错过了什么。

以下是抛出的异常:

Feb 23, 2015 1:18:27 AM org.apache.hadoop.security.UserGroupInformation doAs
SEVERE: **PriviledgedActionException as:cloudera via cloudera        cause:java.io.IOException: Mkdirs failed to create /user/cloudera
java.io.IOException: Mkdirs failed to create /user/cloudera
at**   org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:378)
    at   org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:364)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:564)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:545)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:507)
    at org.apache.hadoop.fs.FileSystem.createNewFile(FileSystem.java:647)
    at HDFSFileOperations.GetIntoFS$1.run(GetIntoFS.java:32)
    at HDFSFileOperations.GetIntoFS$1.run(GetIntoFS.java:1)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at     org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1    190)
    at HDFSFileOperations.GetIntoFS.main(GetIntoFS.java:21)

0 个答案:

没有答案