HDFS 의 파일 이나 폴 더 권한 동작

22673 단어 빅 데이터
HDFS 에 있 는 파일 이나 폴 더 에 대한 API 권한 사용
package com.hondali.permission;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.permission.FsAction;
import org.apache.hadoop.fs.permission.FsPermission;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 *     /      。
 */
public class HDFSPermission {

    /**
     *   hdfs  /     
     *
     * @param conf   
     * @param host ip   hostname
     * @param port   
     * @param path   /     
     * @param permission   
     */
    public void setPermission(Configuration conf, String host, String port, String path, String permission){
        String hdfsPath = "hdfs://" + host + ":" + port;
        try(FileSystem fs = FileSystem.get(new URI(hdfsPath), conf)) {
            FsPermission fsPermission = HDFSPermission.fileSystemAction(permission);
            fs.setPermission(new Path(path), fsPermission);
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }

    /**
     *   hdfs  /     
     *
     * @param conf   
     * @param host ip   hostname
     * @param port   
     * @param path   /     
     * @param u       
     * @param g      
     * @param o       
     */
    public void setPermission(Configuration conf, String host, String port, String path, FsAction u, FsAction g, FsAction o) {
        String hdfsPath = "hdfs://" + host + ":" + port;
        try (FileSystem fs= FileSystem.get(new URI(hdfsPath), conf)) {
            FsPermission fsPermission = new FsPermission(u, g, o);
            fs.setPermission(new Path(path), fsPermission);
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }

    /**
     *            
     * 
     * @param permission   
     * @return   /    
     */
    private static FsPermission fileSystemAction(String permission) {
        FsPermission fsPermission = null;
        switch (permission){
            //      :----------
            //      :d---------
            case "000":
                fsPermission = new FsPermission(FsAction.NONE, FsAction.NONE, FsAction.NONE);
                break;
            //      :---x--x--x
            //      :d--x--x--x
            case "111":
                fsPermission = new FsPermission(FsAction.EXECUTE, FsAction.EXECUTE, FsAction.EXECUTE);
                break;
            //      :--w--w--w-
            //      :d-w--w--w-
            case "222":
                fsPermission = new FsPermission(FsAction.WRITE, FsAction.WRITE, FsAction.WRITE);
                break;
            //      :--wx-wx-wx
            //      :d-wx-wx-wx
            case "333":
                fsPermission = new FsPermission(FsAction.WRITE_EXECUTE, FsAction.WRITE_EXECUTE, FsAction.WRITE_EXECUTE);
                break;
            //      :-r--r--r--
            //      :dr--r--r--
            case "444":
                fsPermission = new FsPermission(FsAction.READ, FsAction.READ, FsAction.READ);
                break;
            //      :-r-xr-xr-x
            //      :dr-xr-xr-x
            case "555":
                fsPermission = new FsPermission(FsAction.READ_EXECUTE, FsAction.READ_EXECUTE, FsAction.READ_EXECUTE);
                break;
            //      :-rw-rw-rw-
            //      :drw-rw-rw-
            case "666":
                fsPermission = new FsPermission(FsAction.READ_WRITE, FsAction.READ_WRITE, FsAction.READ_WRITE);
                break;
            //      :-rwxrwxrwx
            //      :drwxrwxrwx
            case "777":
                fsPermission = new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL);
                break;
        }
        return fsPermission != null ? fsPermission : new FsPermission(FsAction.ALL, FsAction.READ_EXECUTE, FsAction.READ_EXECUTE);
    }
}

위의 코드 에 아래 코드 와 유사 한 문구 가 나 타 났 습 니 다.이 문 구 는 모든 자원 을 확보 하고 문구 가 끝 날 때 닫 습 니 다.자원 이란 사용 이 끝 난 후에 닫 아야 할 대상 을 말 합 니 다.예 를 들 어 글 에서 사용 하 는 FileSystem 대상 이나 inputstream 과 outputstream 대상 을 말 합 니 다.
try(  1;  2) {
    //   
} catch (IOException e) {
    e.printStackTrace();
}

Junit 를 사용 하여 위의 코드 를 테스트 합 니 다.
package com.hondali.permission.test;

import com.hondali.permission.HDFSPermission;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.permission.FsAction;
import org.junit.Before;
import org.junit.Test;

public class HDFSPermissionTest {
    HDFSPermission permission = null;
    Configuration conf = null;
    @Before
    public void init() {
        System.setProperty("HADOOP_USER_NAME", "hadoop");
        conf = new Configuration();
        permission = new HDFSPermission();
    }

    @Test
    public void testSetPermission(){
        // permission.setPermission(conf, "hadoop51", "9000", "/user/hive/warehouse/test","333");
        permission.setPermission(conf, "hadoop51", "9000", "/user/hive/warehouse/test", FsAction.ALL,FsAction.READ_EXECUTE,FsAction.READ_EXECUTE);
    }
}

좋은 웹페이지 즐겨찾기