반응형

그냥 귀여워서..

<hdfs>

ㅇ 저장할 수 있는 파일 수는 네임노드의 메모리 용량에 좌우됨 : 파일시스템의 메타데이터를 메모리에서 관리

ㅇ disk block : 한번에 읽고 쓸 수 있는 데이터의 최대량

    - filesystem block : 디스크 블록 크기의 정배수. 기본 512bytes이며 보통 수 kbytes

    - hdfs : hdfs의 파일은 특정 블록 크기의 chunk로 쪼개지고 독립적으로 저장됨

       filesystem에서 file은 disk block보다 파일이 작아도 파일 크기를 block 만큼 점유하지만, hdfs는 그렇지 않으며 block size가 매우 큼

       (기본 128mb)

ㅇ hdfs의 block size가 큰 이유 : 탐색 비용의 최소화

ㅇ 맵리듀스의 맵 태스크는 기본적으로 한 번에 하나의 블록을 처리

 

<hdfs cluster>

master-worker 패턴으로 동작

ㅇ namenode(master)

    - 파일시스템의 네임스페이스를 관리

    - 파일시스템 트리, 트리에 포함된 파일 & 디렉토리의 메타데이터를 유지(namespace image, edit log 파일로 로컬에 저장)

    - 파일에 속한 모든 블록이 어느 데이터노드에 있는지 파악(시스템 시작 시 데이터노드로부터 정보를 받아 재구성)

    - 네임노드 장애 시 파일시스템이 동작하지 않으므로 장애복구 기능을 제공(파일 백업, secondary namenode 운영)

    - hdfs federation : 네임스페이스 정보를 각각의 네임노드가 나누어서 관리(2.x부터 지원)

ㅇ datanode(worker)

    - 클라이언트, 네임노드에서 요청이 있을 때 블록을 저장하고 탐색

    - 저장하고 있는 블록 목록을 주기적으로 네임노드에 보고

 

<Map Reduce>

ㅇ Map

    - Reduce에 데이터를 제공

    - 잘못된 레코드를 거르거나 필수 값 누락 데이터 제거 등 전처리작업에 적합

    - 입력 데이터가 있는 노드에서 맵 태스크를 실행할 때 가장 빠름(데이터 지역성 최적화 - 네트웍 대역폭 미사용)

    - Reduce로 입력을 보내기 전 Key-Value 쌍은 Reduce를 실행할 노드에서 Key를 기준으로 정렬되고 그룹화됨(suffle)

ㅇ Reduce

    - 정렬되고 그룹화된 value들에 대해 연산을 수행

 

<Job>

ㅇ 클라이언트가 수행하는 작업의 기본 단위

ㅇ 입력 데이터, M/R Program, 설정 정보로 구성

ㅇ 하둡은 Job을 Map task와 Reduce task로 나누어 실행

ㅇ 각 task는 yarn을 이용하여 스케쥴링되고 클러스터의 여러 노드에서 실행됨

ㅇ 잡의 입력을 입력 스플릿(input split) 혹은 스플릿이라는 고정 크기 조각으로 분리함. 스플릿마다 하나의 Map Task를 생성하고 스플릿의 각 레코드를 사용자 정의 맵 함수로 처리.

ㅇ 스플릿이 작을 수록 부하분산에 좋은 효과를 볼 수 있으나 너무 작을 경우 스플릿 관리 및 맵 태스크 생성을 위한 오버해드가 생겨 실행시간이 증가함. 일반적인 잡의 적절한 스플릿 크기는 hdfs 블록의 기본 크기가 적당하다고 알려져 있음

 

<MR, Tez>

ㅇ 맵의 결과물은 로컬에 저장되나, 셔플 후 Reduce 결과물은 hdfs에서 저장됨

ㅇ MR을 여러번 할 경우 hdfs에 저장하는 단계에서 I/O 오버헤드가 발생

ㅇ Tez는 I/O 오버헤드를 줄이기 위해 중간 리듀스 결과를 메모리에 저장

ㅇ Hive에서 실행엔진으로 MR대신 사용할 수 있음

 

 

출처 : 하둡 완벽 가이드 4판, https://wikidocs.net/23569

반응형

+ Recent posts