ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hadoop Block 알아보기
    Hadoop 2023. 11. 27. 06:15
    728x90
    반응형

    - 목차

     

    함께 보면 좋은 글.

    https://westlife0615.tistory.com/20

     

    Hadoop 도커로 실행하기

    - 목차 소개. 하둡을 이해하기 위해서 실습을 하고자하였습니다. 하지만 리눅스 또는 AWS 에서의 실행은 VM 을 사용하거나 비용이 청구되는 수고로움이 있었습니다. 그래서 도커로 실행하는 방법

    westlife0615.tistory.com

     

    소개.

    hdfs 의 block 에 대해서 알아보려고 합니다.
    hdfs 는 하나의 파일을 작은 block 으로 나누어 block 단위의 저장을 합니다.
    block 의 크기는 대개 128mb 사이즈를 가집니다.
    그래서 1gb 의 파일 하나는 8개의 block 들로 나뉠 수 있습니다.
    이렇게 파일로부터 생성된 block 들은 여러 datanode 에 저장됩니다.
    가용성의 목적을 이루기 위해서 block 들은 최대한 다양한 datanode 로 분산되어 저장되게 됩니다.

     

    기본적으로 128MB 크기를 기준으로 하나의 파일이 여러 Block 들로 나뉘어집니다.

    제일 마지막 Block 을 제외하고 나머지 Block 들은 모두 동일한 크기를 가지게 됩니다.

    Block 생성해보기.

    먼저 파일을 HDFS 에 생성하고, 어떻게 Block 으로 나뉘어지는지 살펴보겠습니다.
    아래 글은 Docker 로 Hadoop 클러스터를 실행시키는 예시인데요.
    해당 내용을 토대로 Hadoop 을 도커로 실행시키거나 다른 방식으로 하둡을 실행시키면 좋을 것 같습니다.
     
    https://westlife0615.tistory.com/20

     

    Hadoop 도커로 실행하기

    - 목차 소개. 하둡을 이해하기 위해서 실습을 하고자하였습니다. 하지만 리눅스 또는 AWS 에서의 실행은 VM 을 사용하거나 비용이 청구되는 수고로움이 있었습니다. 그래서 도커로 실행하는 방법

    westlife0615.tistory.com

     
     
    테스트를 위해서 파일을 생성해보겠습니다.
     

    sh>> touch /tmp/test.txt
    sh>> echo aaa >> /tmp/test.txt

     
    testNS 라는 이름의 네임스페이스를 생성합니다.

    hdfs dfs -mkdir /testNS/

     
    그리고 test.txt 파일을 testNS 네임스페이스 하위에 생성합니다.
     

    hdfs dfs -put /tmp/test.txt /testNS/

     
    test.txt 를 testNS 네임스페이스 하위에 생성하게 되면 아래와 같이 1개의 Block 이 생성됨을 할 수 있습니다.

     
    현재 dfs.replication 값이 1 이기 때문에 복제없이 1개의 Block 만이 생성됨을 확인할 수 있습니다.

    cat $HADOOP_CONF_DIR/hdfs-site.xml
    <configuration>
    <property><name>dfs.namenode.rpc-address</name><value>namenode:8020</value></property>
    <property><name>dfs.replication</name><value>1</value></property>
    </configuration>

     
     
    그럼 또 다른 파일을 생성하는데, 이번에는 dfs.replication 값을 3으로 변경한 후에 파일을 생성해보겠습니다.
     

    cat $HADOOP_CONF_DIR/hdfs-site.xml
    <configuration>
    <property><name>dfs.namenode.rpc-address</name><value>namenode:8020</value></property>
    <property><name>dfs.replication</name><value>3</value></property>
    </configuration>
    hdfs dfs -put /tmp/test.txt /testNS/

     
    아래와 같이 3개의 데이터노드에 복제되어 저장됩니다.

     
     
    그리고 아래와 같은 명령어로 생성된 파일을 확인할 수 있습니다.

    hdfs dfs -ls /testNS/
    Found 1 items
    -rw-r--r--   3 hadoop supergroup         56 2023-11-05 02:10 /testNS/test.txt

    Block 은 어디에 저장될까?


    하나의 파일은 여러개의 block 으로 나뉘어집니다.
    그리고 block 들은 복제를 거쳐 여러 데이터노드들로 분산되어 저장됩니다.
    하나의 block 은 하나의 파일로 저장이 되는데요.
    데이터노드 입장에서 파일이 쪼개진 block 이라기보단 하나의 온전한 파일입니다.
    block 이라는 파일이 저장되는 위치는 다음과 같습니다.

    <property>
      <name>dfs.datanode.data.dir</name>
      <value>/path/to/directory1,/path/to/directory2</value>
    </property>
    


    hdfs-site.xml 내부에 설정된 dfs.datanode.data.dir 로 설정된 위치 하위에 block 들이 저장됩니다.
    만약 여러 개의 디스크가 사용된다면
    dfs.datanode.data.dir 또한 comma 로 구분된 여러 값을 가질 수 있습니다.



    반응형

    'Hadoop' 카테고리의 다른 글

    Hadoop DataNode 알아보기  (0) 2023.12.12
    Hadoop fsimage 알아보기  (0) 2023.12.11
    Hadoop Namespace 알아보기  (0) 2023.12.04
    Hadoop Edit Log 알아보기  (0) 2023.12.04
    [Hadoop] Docker 로 Hadoop Cluster 실행하기 ( docker-compose )  (0) 2021.12.15
Designed by Tistory.