ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Hadoop] Hadoop의 클러스터 구성, 파일 저장 되는 원리, 파일 읽는 원리 이해하기
    데이터 엔지니어링/Hadoop 2022. 8. 10. 20:27
    반응형

    안녕하세요. 이번에 데이터 엔지니어링을 하면서 docker로 진행을 많이 했었는데 한계점이 많은 것 같아 하둡 클러스터를 구축하여 여러가지 hadoop eco system을 연습하기로 마음을 먹었습니다. 그래서 Hadoop + yarn + spark + zookeeper + zeppelin 등을 구축하고 추가적으로 다른 툴들(impala, ambari, hive등)을 붙여서 연습해볼 예정입니다. 

    위에 이미지가 제가 구축 할 내용입니다. 먼저 하둡 클러스터를 구성을 할 것인데 하둡이 이번 글에서는 하둡이 어떻게 동작하는지 먼저 알아 두어야 할 것 같아 하둡의 동작 원리에 대해 정리 하려고 합니다. 

     

    HDFS(Hadoop Distributes FileSystem) - 하둡 네트워크에 연결된 기기에 데이터를 분산해서 저장 할 수 있는 기술 하둡은 데이터를 분산 저장하기 때문에 데이터 유실을 방지 해야 하며, 한번 저장한 것은 수정 할 수 없고, 삭제, 복제 이동만 가능합니다.

     

    위에 그림에서 보듯이 제가 구성한 그림과 거의 유사한데 이렇게 하는 이유가 있습니다. HDFS는 분산 저장을 하기 때문에 노드들이 유실되거나 다운되면 해당 노드의 파일이 사라지지 않게 관리 해주는 역할이 필요한데 이것이 바로 NameNode가 하는 것입니다. Secondary Namenode는 이 관리 해주는 NameNode가 없어지거나 다운되면 대체로 동작해야하는 서버가 필요하기 때문에 필요한 녀석입니다. 여기서 Namenode의 상태를 파악해 주는 것이 바로 JournalNode라는 것이 있는데 이 노드는 컴퓨터라기 보다는 NameNode와 Secondary Namenode Datanode들 중에 떠도는 놈이라고 생각하시면 됩니다. Name node가 다운되면 이 JournalNode는 다시 Secondary Namenode에 위치합니다. 그리고 Secondary Namenode가 Namenode가 되어 HDFS를 운행합니다. 다시 죽었던 Namenode는 다시 키더라도 Secondary namenode가 됩니다.

     

    하둡 클러스터 구성요소

    • NameNode - DataNode들의 연결 정보를 직접 관리하고 HDFS를 직접 관리해주는 역할
    • SecondaryNameNode - Namenode 역할을 하지만 주최가 아니라 Namenode의 상태를 파악하다가 죽거나 유실되면 대체로 NameNode가 되는 역할
    • JournalNode - NameNode와 SecondaryNamenode, DataNode의 상태와 연결성을 유지해주는 역할(컴퓨터는 아님)
    • DataNode - 실제로 HDFS의 데이터가 보관되는 곳 

     

    파일 저장 플로우

    1. 우리가 작성하는 요청 HDFS에 저장할 내용을 요청 한다.
      • a - NameNode는 파일이 저장 될 경로 생성 이건 아무 DataNode에서 결정됨
      • b - NameNode는 DataNode가 제공한 파일의 경로를 생성 한 후 다른 Node들이 관려 하지 못하게 락킹
      • c - NameNode는 클라이언트에게 파일의 목록을 받음
    2. 클라이언트는 할당받은 데이터노드의 경로에 파일을 전송
    3. 첫번째 datanode는 replica(복제)를 진행하여 다음 Datanode에게 데이터 전송 및 복제 
    4. 두번째 datanode도 replica(복제) 진행
    5. 5~6번은 복제 완료 되었다고 신호 보냄 
    6. 7번은 클라이언트에게 완료 되었다고 보내고 8번은 이 상태를 NameNode에게 보내여 동작이 끝났음을 알려줌

     

    파일 읽기 플로우

    1. 우리가 요청한 파일 읽어 달라고 HDFS클라이언트에게 요청 
    2. 클라이언트는 네임노드에게 요청된 파일이 어떤 블록에 저장되어 있는지 정보 요청 
    3. 경로 정보 전달 
    4. 데이터 읽어서 보냄 
    5. 데이터 읽어서 보냄
    6. 클라이언트는 다시 어플리케이션에게 파일 보냄 

     

    위와 같은 이유로 하둡클러스터를 구성할 때는 NameNode는 2개 이상 , DataNode는 3개이상을 준비해 주시는게 좋다고 합니다. 또한 replica는 2개로 해주는게 좋다고 합니다. 3개이상을 하면 너무 많은 양이 복제가 되어 필요없는 복제도 있을 수 있기때문입니다. 처음에는 괜찮은데 커지면 문제가 될 수 있으니 

     

     

     

     

    참고문헌

    https://zetastring.tistory.com/87

    반응형

    댓글

Designed by Tistory.