ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hadoop File Permission 알아보기 (ACL)
    Hadoop 2023. 12. 15. 06:42
    728x90
    반응형

     

    - 목차

     

    소개.

    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
Designed by Tistory.