-
Hadoop File Permission 알아보기 (ACL)Hadoop 2023. 12. 15. 06:42728x90반응형
- 목차
소개.
Hadoop 의 File Permssion 에 대해서 알아보려고 합니다.
Hadoop 의 File Permission 은 기존의 Linux 시스템에서 사용하는 Permission 체계와 유사합니다.
File 과 Directory 마다 Owner 가 존재하게 되구요.
Owner 가 속하는 Group 이 존재합니다.
그리고 Read, Write, Execute 에 해당하는 권한을 부여할 수 있습니다.
또한 ACL (Access Control List) 또한 적용이 가능한데요.
이와 관련된 내용와 설정 방식이 대해서 알아보려고 합니다.
먼저 간단하게 Hadoop Cluster 를 생성해보도록 하겠습니다.
1. hadoop config 파일을 생성합니다.
하둡은 core-site.xml, hdfs-site.xml 등의 xml 설정을 기본으로 합니다.
아래 명령어를 통해서 hadoop_config 정보를 생성합니다.
cat <<EOF> /tmp/hadoop_config CORE-SITE.XML_fs.default.name=hdfs://namenode CORE-SITE.XML_fs.defaultFS=hdfs://namenode HDFS-SITE.XML_dfs.namenode.rpc-address=namenode:8020 HDFS-SITE.XML_dfs.replication=1 MAPRED-SITE.XML_mapreduce.framework.name=yarn MAPRED-SITE.XML_yarn.app.mapreduce.am.env=HADOOP_MAPRED_HOME=$HADOOP_HOME MAPRED-SITE.XML_mapreduce.map.env=HADOOP_MAPRED_HOME=$HADOOP_HOME MAPRED-SITE.XML_mapreduce.reduce.env=HADOOP_MAPRED_HOME=$HADOOP_HOME YARN-SITE.XML_yarn.resourcemanager.hostname=resourcemanager YARN-SITE.XML_yarn.nodemanager.pmem-check-enabled=false YARN-SITE.XML_yarn.nodemanager.delete.debug-delay-sec=600 YARN-SITE.XML_yarn.nodemanager.vmem-check-enabled=false YARN-SITE.XML_yarn.nodemanager.aux-services=mapreduce_shuffle CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.maximum-applications=10000 CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.maximum-am-resource-percent=0.1 CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.queues=default CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.capacity=100 CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.user-limit-factor=1 CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.maximum-capacity=100 CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.state=RUNNING CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.acl_submit_applications=* CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.acl_administer_queue=* CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.node-locality-delay=40 CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.queue-mappings= CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.queue-mappings-override.enable=false EOF
2. hadoop docker-compose.yaml 생성합니다.
cat <<EOF> /tmp/hadoop-docker-compose.yaml version: "2" services: namenode: platform: linux/amd64 container_name: namenode image: apache/hadoop:3 hostname: namenode command: ["hdfs", "namenode"] ports: - 9870:9870 - 8020:8020 env_file: - /tmp/hadoop_config networks: - hadoop_network datanode: platform: linux/amd64 container_name: datanode depends_on: - namenode links: - namenode:namenode image: apache/hadoop:3 command: ["hdfs", "datanode"] env_file: - /tmp/hadoop_config networks: - hadoop_network resourcemanager: platform: linux/amd64 image: apache/hadoop:3 hostname: resourcemanager command: ["yarn", "resourcemanager"] ports: - 8088:8088 env_file: - /tmp/hadoop_config volumes: - ./test.sh:/opt/test.sh networks: - hadoop_network nodemanager: platform: linux/amd64 image: apache/hadoop:3 command: ["yarn", "nodemanager"] env_file: - /tmp/hadoop_config networks: - hadoop_network networks: hadoop_network: name: hadoop_network EOF
3. docker-compose 를 실행합니다.
docker-compose -f /tmp/hadoop-docker-compose.yaml --project-name=hadoop up -d
hdfs file permission 조회.
여러 Namespace 와 File 들을 먼저 생성해보도록 하겠습니다.
먼저 테스트를 위한 파일을 생성하겠습니다.
touch /tmp/test.txt echo 123456789 > /tmp/test.txt
Namespace test_ns 생성.
docker exec -it namenode hdfs dfs -mkdir /test_ns
Namespace test_ns2 생성.
docker exec -it namenode hdfs dfs -mkdir /test_ns2
test_ns/test.txt 파일 생성.
먼저 test.txt 를 Docker Container 내부로 복사합니다.
docker cp /tmp/test.txt namenode:/tmp/test.txt
docker exec -it namenode hdfs dfs -put /tmp/test.txt /test_ns/
test_ns2/test.txt 파일 생성.
docker exec -it namenode hdfs dfs -put /tmp/test.txt /test_ns2/
각 디렉토리와 파일의 Permission 을 조회해보도록 하겠습니다.
docker exec -it namenode hdfs dfs -ls / docker exec -it namenode hdfs dfs -ls /test_ns/ docker exec -it namenode hdfs dfs -ls /test_ns2/ docker exec -it namenode hdfs dfs -getfacl / docker exec -it namenode hdfs dfs -getfacl /test_ns docker exec -it namenode hdfs dfs -getfacl /test_ns2 docker exec -it namenode hdfs dfs -getfacl /test_ns/test.txt docker exec -it namenode hdfs dfs -getfacl /test_ns2/test.txt
아래와 같이 조회가 되구요.
Owner : hadoop, Group : supergroup 으로 나타납니다.
Found 2 items drwxr-xr-x - hadoop supergroup 0 2022-01-18 02:41 /test_ns drwxr-xr-x - hadoop supergroup 0 2022-01-18 02:41 /test_ns2 Found 1 items -rw-r--r-- 1 hadoop supergroup 10 2022-01-18 02:41 /test_ns1/test.txt Found 1 items -rw-r--r-- 1 hadoop supergroup 10 2022-01-18 02:41 /test_ns2/test.txt
ACL 목록은 아래와 같습니다.
# file: / # owner: hadoop # group: supergroup user::rwx group::r-x other::r-x # file: /test_ns # owner: hadoop # group: supergroup user::rwx group::r-x other::r-x # file: /test_ns2 # owner: hadoop # group: supergroup user::rwx group::r-x other::r-x # file: /test_ns/test.txt # owner: hadoop # group: supergroup user::rw- group::r-- other::r-- # file: /test_ns2/test.txt # owner: hadoop # group: supergroup user::rw- group::r-- other::r--
chmod.
새로운 hdfs Client 를 생성하여 원격으로 NameNode 에 접근해보도록 하겠습니다.
docker run -d --link namenode:namenode --network hadoop_network --name hdfs-client apache/hadoop:3 sleep 10000000
새로운 user1 이라는 사용자로써 test_ns3 네임스페이를 생성해봅니다.
아래와 같이 Permission denied 출력을 확인할 수 있습니다.
docker exec -it hdfs-client sh sudo usermod -l user1 hadoop hdfs dfs -mkdir hdfs://namenode:8020/test_ns3
mkdir: Permission denied: user=user1, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x
Change Ownership.
아래와 같이 user1 사용자에게 Root Namespace 에 Read, Write 권한을 부여합니다.
docker exec -it namenode hdfs dfs -setfacl -m user:user1:rwx /
그리고 Root Namespace 의 ACL 를 조회하면 user1 이 추가됨을 확인할 수 있습니다.
docker exec -it namenode hdfs dfs -getfacl /
# file: / # owner: hadoop # group: supergroup user::rwx user:user1:rw- group::r-x mask::rwx other::r-x
마지막으로 아래 커맨드를 통해 test_ns3 네임스페이스를 생성하면
성공적으로 생성되는 것을 확인할 수 있습니다.
docker run -it --link namenode:namenode --network hadoop_network --name hdfs-client apache/hadoop:3 sh sudo usermod -l user1 hadoop hdfs dfs -mkdir hdfs://namenode:8020/test_ns3 hdfs dfs -ls hdfs://namenode:8020/
Found 4 items drwxr-xr-x - hadoop supergroup 0 2023-12-18 03:09 hdfs://namenode:8020/test drwxr-xr-x - hadoop supergroup 0 2023-12-18 02:56 hdfs://namenode:8020/test_ns drwxr-xr-x - hadoop supergroup 0 2023-12-18 02:41 hdfs://namenode:8020/test_ns2 drwxr-xr-x - user1 supergroup 0 2023-12-18 03:44 hdfs://namenode:8020/test_ns3
반응형'Hadoop' 카테고리의 다른 글
Zookeeper Watch Mechanism 알아보기 (2) 2023.12.19 Zookeeper Znode 알아보기 (0) 2023.12.19 Hadoop DataNode 알아보기 (0) 2023.12.12 Hadoop fsimage 알아보기 (0) 2023.12.11 Hadoop Namespace 알아보기 (0) 2023.12.04