하둡(Hadoop)

이상우·2022년 1월 8일
0

이번 블로그 정리는 T아카데미 하둡 강좌를 참고하여 정리하는 글이다.

Hadoop 이란?

하둡 소프트웨어 라이브러리는 간단한 프로그래밍 모델을 사용하여 여러대의 컴퓨터 클러스터에서 대규모 데이터 세트를 분산 처리 할 수있게 해주는 프레임워크 이다.
단일 서버에서 수천대의 머신으로 확장 할 수 있도록 설계되었다.
일반적으로 하둡파일시스템(HDFS)과 맵리듀스(MapReduce)프레임워크로 시작되었으나, 여러 데이터저장, 실행엔진, 프로그래밍 및 데이터처리 같은 하둡 생태계 전반을 포함하는 의미로 확장 발전 되었다.

HDFS(Hadoop Distributed File System)

수십 테라바이트 또는 페타바이트 이상의 대용량 파일을 분산된 서버에 저장하고, 그 저장된 데이터를 빠르게 처리할 수 있게 하는 파일시스템이다. 또한 저사양의 서버를 이용해서 스토리지를 구성할 수 있어 기존의 대용량파일스시스템(NAS, DAS, SAN등)에 비해 장점을 가진다. HDFS는 블록 구조의 파일 시스템이다. 파일을 특정크기의 블록으로 나누어 분산된 서버에 저장된다. 블록크기는 64MB에서 하둡2.0부터는 128M로 증가되었다.

블록이란?

  • 하나의 파일을 여러 개의 block으로 저장
  • 설정에 의해 하나의 block은 64MB 또는 128MB등의 큰 크기로 나누어 저장
  • 블록 크기가 128MB보다 적은 경우는 실제 크기 만큼만 용량을 차지함
  • 블록 하나의 크기가 큰 이유는 탐색 비용을 최소화할 수 있기 때문 블록이 크면 하드디스크에서 블록의 시작점을 탐색하는 데 걸리는 시간을 줄일 수 있고, 네트워크를 통해 데이터를 전송하는데 더 많은 시간을 할당이 가능하다.

블록의 지역성

  • 네트워크를 이용한 데이터 전송 시간 감소
  • 대용량 데이터 확인을 위한 디스크 탐색 시간 감소
  • 적절한 단위의 블록 크기를 이용한 CPU처리시간 증가

블록 캐싱

  • 데이터 노드에 저장된 데이터 중 자주 읽는 블록은 블록캐리라는 데이터 노드의 메모리에 명시적으로 캐싱할 수 있다.
  • 파일 단위로 캐싱할 수도 있어서 조인에 사용되는 데이터들을 등록하여 읽기 성능을 높일 수 있음

네임노드와 데이터노드

HDFS는 네임노드(마스터)와 데이터노드(슬레이브)로 구현되어 있다.

네임노드

  • 메타데이터관리: 파일 시스템을 유지하기 위한 메타데이타를 관리
  • 데이터노드 모니터링: 데이터노드는 네임노드에게 3초마다 하트비트(heartbeat)를 전송한다. 네임노드를 이를 이용하여 데이터노드의 실행상태와 용량을 체크한다. 하트비트를 전송하지 않는 데이터노드는 장애서버로 판단한다.
  • 블록관리: 장애가 발생한 데이터노드의 블록을 새로운 데이터노드에 복제한다. 용량이 부족하다면 여유가 있는 데이터노드에 블록을 옮긴다.
  • 클라이언트 요청접수: 클라이언트가 HDFS에 접근하려면 반드시 네임노드에 먼저 접속해야 한다. HDFS에 파일을 저장할 경우 기존 파일의 저장여부와 권한 확인 절차를 거쳐 저장을 승인한다.

데이터노드

클라이언트가 HDFS에 저장하는 파일을 로컬 디스크에 유지하다. 이때 파일은 두가지로 저장되는데 하나는 실제 저장되는 로우데이터이고 다른 하나는 체크섬이나 파일생성일자 같은 메타데이터가 저장된 파일이다.

HDFS에 파일저장


1. 클라이언트에서 저장 요청을 합니다.
2. DFSOutputStream안에 DataStreamer 객체가 네임 노드에게 블록 추가를 요청합니다.
3. 네임노드는 요청을 받은 뒤 데이터 노드의 목록을 반환해줍니다.
4. 데이터 노드로 패킷을 전송합니다.
5. 데이터 노드에서 패킷을 전송 받았다고 알려줍니다.
6. 데이터 노드들은 네임 노드에게 저장 완료 결과를 알려줍니다.

HDFS에 파일읽기

  1. 클라이언트에서 네임노드의 입력스트림객체(DFSInputStream)를 통해 스트림객체를 생성한다.
  2. 생성된 스트림객체를 이용하여 기본 블록의 10배수만큼 조회한다.
  3. 클라이언트에서 스트림객체에서 블록리더기 생성하는데 블록이 저장된 데이터노드가 같은 서버에 있다면 로컬블록리더기(BlockReaderLocal)를 생성하고, 원격에 있다면 원격블록리더기(RemoteBlockReader)를 생성한다.
  4. DFSInputStream은 파일 모두 읽을 때까지 블록을 조회한다. 모두 읽었다면 close를 통해 닫아주어야 한다.

참고 사이트

profile
구상한것을 구현할 수 있는 개발자가 되고 싶습니다.

0개의 댓글