하둡(Hadoop)

Think_Positively·2021년 4월 21일
0

하둡

하둡은 빅데이터의 핵심 소프트웨어다. 빅데이터의 에코시스템들은 대부분 하둡을 위해 존재하고 하둡에 의존해서 발전해 가고 있다 해도 과언이 아니다. 하둡은 크게 두 가지 기능이 있다. 첫 번째가 대용량 데이터를 분산 저장하는 것이고, 두 번째는 분산 저장된 데이터를 가공/분석 처리하는 기능이다.

HDFS(Hadoop Distributed File System)

뜻 자체에서 알 수 있듯, 하둡의 분산된 파일 시스템이다.

HDFS 구성 요소

  • NameNode: 전체적인 HDFS가 어떻게 구성되어 있는지, 어디에 어떤 블록이 저장되어 있는지에 대한 Meta data 관리.
  • DataNode: 실질적으로 파일을 저장하는 역할. Content data(블록 단위)
  • Client: 사용자가 작성한 프로그램. HDFS에 파일을 쓰거나 읽는 작업 요청

*Meta data: 블록에 대한 설명 Data | Content data: 실질적 데이터(블록)


HDFS에 파일 읽기 작업

  1. Client가 NameNode에 원하는 블록들의 목록과 주소를 요청
  2. 가장 가까이 위치한 데이터 노드에서 블록을 읽어옴

HDFS에 파일 쓰기 작업

  1. Client가 NameNode에게 어느 데이터 노드에 블록을 쓰면 좋을지 요청
  2. NameNode가 알맞는 DataNode 할당.
  3. Data Pipeline 생성
  4. 블록 쓰기.

DataNode, NameNode 3가지 통신

  1. handshake: 맨 처음 데이터 노드를 네임노드에 등록할 때 수행. DN가 통신이 가능한지 체크. 적합하면 고유 id 부여.

  2. block report: 네임노드가 블록이 저장된 위치를 실제로 알 수 있는 이유. 각 DN들은 매 시간마다 NN에 블록 저장 위치와 현황 알려준다.

  3. heartbeat: 각 DN는 3초에 한번씩 heartbeat를 네임 노드에게 보내며 자신이 잘 동작하고 있음을 확인. NN는 10분간 응당이 없는 노드는 고장으로 간주. 해당 노드에 저장되어 있는 블록을 다른 노드에 복사본으로 추가.


NameNode 백업

  • image: 파일에 메타 정보를 담은 inode와 각 파일을 구성하는 블록들의 리스트를 합쳐서 지칭하는 개념.
  • checkpoint: image를 디스크에 쓴 것.
  • Journal: image에 발생한 모든 변화들을 기록한 로그파일
  • NN는 가용성을 위해 주기적으로 checkpoint 생성. 만일 NN가 장애로 인해 재부팅시 -> 최신 checkpoint를 읽고 Journal을 순차적으로 실행시켜 복원시킴.
  • NN는 HDFS의 취약점 -> 이유인즉슨 너무 많은 일을 하고, 혹여나 장애를 일으키면 클러스터 먹통 위험성이 크다. 그러므로 Active NN / Standby NN를 생성

Block Placement (블록 배치)

  • 각각의 DN들은 rack에 묶입니다. rack은 일종의 케이스로, 같은 rack에 DN들은 네트워크 스위치를 공유합니다. 그렇기 때문에 같은 rack에 DN들은 통신이 빠릅니다.
  • 여러개의 rack들은 코어 swtich로 묶입니다. 그리고 이렇게 묶여있는 DN는 다음과 같은 원칙으로 replica 분산
  1. 하나의 DN에는 블록 replica를 하나만 저장
  2. 하나의 rack에는 블록 replica를 최대 두개까지만 저장

Balancer 모듈

나중에 추가된 DN의 디스크 공간은 비어있는 반면, 오래 사용한 DN의 공간은 꽉 차게 됩니다. 이때 Balacer 모듈을 사용하여 DN들의 디스크 사용량을 비슷하게 옮겨주고 와중에 가용성을 위해 같은 node에 replica를 두지않고 같은 rack 새 replica를 저장하지 않도록 최적화까지 해줍니다.


Reference

실무로 배우는 빅데이터 기술 - 김강원/위키북스
https://yeomko.tistory.com/38?category=878347 - 갈아먹는 BigData[2] HDFS(하둡 분산 파일 시스템)

profile
데이터 엔지니어를 꿈꾸며

0개의 댓글