HDFS 의 파일 이나 폴 더 권한 동작
22673 단어 빅 데이터
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);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spark 의 2: 원리 소개Google Map/Reduce 를 바탕 으로 이 루어 진 Hadoop 은 개발 자 에 게 map, reduce 원 어 를 제공 하여 병렬 일괄 처리 프로그램 을 매우 간단 하고 아름 답 게 만 들 었 습 니 다.S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.