hubring

Hadoop 개념 정리 본문

BigData/hadoop

Hadoop 개념 정리

Hubring 2020. 8. 4. 23:55

1. HDFS YARN이란 무엇인가요?

 

hdfs(Hadoop distributed file system ) 개념 : 분산 파일 시스템

 

- HDFS Hadoop 애플리케이션에서 사용되는 기본 분산 스토리지

- 마스터(NameNode)/슬레이브(DataNode) 구조의 분산파일 시스템

- 마스터(NameNode)/워커(DataNode) 구조의 분산파일 시스템

- 하나의 파일을 여러개의 블록으로 나눠어 가능한 여러개의 DataNode 저장됨.

- 하부 운영체제의 파일 시스템을 그대로 사용, 데이터 노드를 설치하기 위해 다른 파일 시스템을 설치할 필요없이 디스크 상의 특정 디렉토리를 데이터 저장으로 사용할 있음

- hdfs 클라이언트를 통해 사용자 대신 nameNode와 DataNode의 접근이 가능합니다.

 

 

hdfs - 설계 

1. 대용량 데이터 저장 장치

2. 스트리밍 방식

3. 범용 하드웨어

 

범용된 하드웨어로 구성된 클러스터에서 실행이 되고

한번의 쓰기와 여러번의 읽기 (스트리밍 방식) 데이터 접근 패턴을 가지며, 대용량의 데이터를 다룰수 있도록 설계된 시스템이다.

 

 

hdfs 의미  -> 설계 -> 블룩 -> 구조 -> 네임노드와 데이터 노드 

 

 

YARN(Yet Another resource negotiator) 개념 : 리소스 관리자와 스케줄러

 

- 효율적인 방법으로 계산 리소스를 할당하고 사용자 애플리케이션을 스케줄링하는 시스템

- 리소스를 컨테이너 형태로 분할하고 컨테이너를 모니터링 하여 최대 할당량을 초과 하지 않게 제어

- 지역성을 제공하여 특정 컨테이너가 특정데이터를 저장하고 있는 서버에 가깝게 실행되도록 요청 가능

- 리소스를 컨테이너로 관리함으로써 분산시스템을 원할하게 운영하고 클러스터를 다수의 애플리케이션에 공평한 방식으로 공유할 있게

- 주요 기능: 스케줄러, 컨테이너 관리, 컨테이너 분리. 데이터 지역성

 

 

하둡의 클러스터 자원 관리 시스템이다.

맵리듀서의 성능을 높이기 위해 하둡 2에서 처음 도입되었으며, 

맵리듀서 뿐만아니라 다른 분산 컴퓨팅 도구도 지원한다.

 

(컨테이너는 작업단위 발생하는 장소)

효율적인 방법으로 리소스 관리와 사용자 애플리케이젼의 스케쥴러 역할을 한다.

 

Yarn 리소스를 컨테이너 형태로 분할하고, 컨테이너를 모니터링하여 쵀대 할당량을 초과하지 않게 제어한다.

 

내트워크 대역폭을 효율적으로 활용하기 위해 지역성을 제공하여 필요 데이터가 위치한 노드와 가까운 노드에서 컨테이너가 실행하도록 요청이 가능하다.

 

Yarn 마스터 리소스 매니저와 여러 노드 매니저 구조로 자원을  관리한다.

 

리소스 메니저는 클러스터의 전체 자원의 사용량을 관리한다.

노드 매니저는 머신에서 실행되며 컨테이너를 구동하고 모니터링한다.

 

스케쥴러를 통해 다수의 사용자 어플리케이션이 공평하게 자원을 사용할 있도록 한다.

 

 

Yarn 등장 -> 기능 -> 자원 관리 -> 리소스 매니저, 노드 매니저

-> 스케쥴러 

 

 

 

 

 

2. 다양한 Hadoop deamon 역할에 대해 모두 기술하시오.

 

HDFS 경우

- NameNode

  마스터 노드, 

  HDFS 저장되는 각종 파일과 디렉토리들의 메타 정보를 관리

  실제 데이터는 다수의 데이터 노드에 분산 저장하는 역할 담당

 

파일시스템 트리구조와 네임스페이스를 메티데이터로 관리하고

파일의 블록 위치 정보를 매핑하여 가지고 있다.

 

 

- Scondary NameNode

  네임노드가 문제가 생길 경우, 복구를 위한 2 네임노드

  네임 노드의 데이터를 주기적으로 백업.

 

업무는 네임스페이스의 이미지와 애딧 로그를 병합하여 새로운 네임스페이스로 만듬

네임스페이스 이미지 복제본을 주기적으로 백업하여 보관

 

- DataNode

  슬레이브 노드

  실제 데이터가 블록 형태로 저장되는 장소

  주기적으로 NameNode 포함된 블록정보를 보고

 

 

 

MapReduce 1 경우

- Job Tracker

  마스터 노드

  트래커가 테스크 트래커들에게 일을 나누어 병렬로 실행

 

여러 테스크 트래커에서 실행되는 테스크를 스케쥴링 함으로써 시스템에 실행하는 모든 잡을 조율한다.

잡과 테스크를 모두 관리

 

 

- Task Tracker

  슬레이브 노드,

  일을 수행하는 노드

 

태스크 트래커는 잡을 실행하고 진행사항을 잡트래커에세 알려준다.

 

 

YARN 경우

- ResourceManager

 클러스터 전체 자원의 사용량 관리

 

  MapReduce 작업과 같은 응용 프로그램에 클러스터 계산 리소스를 제공

  리소스를 컨테이너로 제공하며, 컨테이너는 CPU 코어 RAM 메모리의 할당으로 구성

 

잡 트래커의 역할이 리소스 매니저와 애플리케이션 마스터로 나뉘어짐

 

- NodeManager

  실제로 응용 프로그램이 실행되는 위치

  컨테이너의 라이프 사이클 관리를 감독

  메모리, CPU 자원 사용 모니터링, 노드의 상태 추적

 

태스크 트레커와 비슷한 역할 

 

 

3. Hadoop version1 version2 차이점

 

 

Hadoop version1

 

- 주요 구성 : HDFS, MapReduce

- Hadoop 버전 1에서는 주요 아키텍쳐에 MapReduce 있음.

- HDFS 관리하기 위한 하나의 네임스페이스만 지원 가능

- 방대한 양의 데이터 일괄 처리에만 적합

- 실시간 데이터 처리에는 적합하지 않음.

- 데이터 스트리밍에 적합하지 않음

- 클러스터당 최대 4000개의 노드 지원

 

 

Hadoop version2

 

- 주요 구성 : HDFS, YARN, MapReduce

- Hadoop 버전 2에서는 주요 아키텍쳐에 Yarn 추가 구성되어 있음.

- HDFS 관리하기 위한 여러 네임 스페이스를 지원 가능(HDFS 페더레이션)

- YARN 이용하여 여러 프로그래밍 모델 지원 가능

  (스트리밍, 그래프, 스파크 )

  대화형 SQL, 반복잡업, 스티리밍, 검색

- HDFS에서 가변 크기의 컨테이너 사용가능

  자원이 잘게 쪼개져 있어 필요한 만큼의 자원을 요청할 수 있다.

 

- 클러스터당 최대 10000개의 노드 지원 가능

- 고가용성 제공

 

 

 

구성 -> 에코시스템 -> 관리할 있는 노드수->가용성

 

 

 

4. Hadoop 사용하기에 적합한 상황 3가지 제시하고, 상황의 해결 방안을 설명하시오.

 

1. 소셜 네트워크 텍스트 분석시

페이스북,트위터, 블로그등 온라인 상에 존재하는 택스트 데이터들을 아파치 플럼을 이용하여 입수한다. 

입수된 수천개의 텍스트 파일들을 HDFS 저장한다.

저장된 텍스트들을 하둡 자연어 처리 모델을 이용하여 텍스트 분할을 하거나 품사 태깅, 감성 분석 등에 활용한다.

 

 

2. 데이터 품질 검사

새로운 종류의 데이터가 기하급수적으로 수집되고 저장될때, 하둡을 통해 자동화된 방식으로 작업 검사 작업을 수행한다.

하둡을 통해 적은 비용으로 사본 데이터를 저장할 있으며 데이터의 유형, 변경 주기 등을 이용 가능하다.

피그나 하이브를 이용하여 사용자 정의 함수 형태로 품질 규칙을 구현하여 데이터 품질을 검사할 있다.

 

 

3. 공정 장비 유지 보수 예측

공장에서 장비에 대한 유지 보수를 위해,주기적으로 장비 별로 상태와 환경 데이타들을 받아 하둡에 저장한다.

저장된 데이터들을 스파크와 같은 분산 분석 처리 도구를 이용하여 장비의 장애 패턴을 분석한다.

패턴을 통해 장애가 예측되는 장비를 모니터링하여 관리자가 쉽게 장애 대응을 있도록 한다.

 

 

적합하지 않은 상황 3가지

 

1. 실시간으로 처리해야하는 상황

높을 데이터량을 처리하기위해 데이터 응답시간을 희생함

Hbase 대안

 

2. 수많은 작은 파일

수많은 작은 파일은 네임노드의 메모리를 낭비하게

 

3. 다중 라이터와 파일 수정

한번의 쓰기와 여러번의 읽기 패턴으로 설계되어 있음

따라서 처음 생성하거나 원본 데이터에서 붙여쓰기는 가능하나

중간 수정은 불가

 

 

 

-====================

 

1. HDFS에서 block이란 무엇인가요?

- 데이터를 담는 형태

- 하나의 파일은 여러개의 블록으로 나뉘어짐.

- 기본 128MB 크기 이상 가짐.

 

블록

- 한번에 읽고 있는 최대 크기

- 파일은 블록 크기의 청크로 쪼개진다.

- HDFS 블록

 

 

 

2. HDFS 파일은 immutable한가요?

- HDFS에서 분산 저장과 빠른 처리를 위해 

- 변경 가능한 가변 객체일 경우 동시성을 처리해야한다는 문제점을 가지기 때문에

- 설계 구현에 용이

HDFS 한번쓰고 여러번 읽기 패턴을 바탕으로 설계되었고

  이유는 대규모의 데이터에선 수정 처리보단 빠르게 읽는 것이 중요하기 때문입니다.

또한 변경이 가능하게 되면 분산된 데이터를 가져오는 과정에서 여러 어플리케이션이 접근하다 보면 동시성 처리에 대한 문제가 발생하여

불변성을 통해 HDFS 설계 구현에 용이하도록 했습니다.

 

 

3. Datanode 장비에 장애가 발생했을 , 

클러스터 운영자가 취해야 하는 행동을 시간적으로 서술하시오.

 

 

- DataNode 노드 상태를 확인한다.

- DataNode 종료 시킨

-  장애의 원인을 파악하고 하드웨어를 수정하거나 설정을 변경하거나 새로운 데이터 노드를 생성한다.

- 해당 데이터 노드를 재기동한다.

 

 

- Datanode 장비의 장애가 무엇인지 먼저 파악한다.

- 장애 원인에 따라 Datanode에서 설정을 변경하거나 재시작한다.

- 장애가 고쳐지지 않을 경우 NameNode 해당 DataNode 장애를 알릴 있도록 한다.

 

 

 

4. 크기가 작은 파일이 HDFS 많으면 성능에 영향이 가는지 이유를 설명하고,이를 해결하기 위한 방안을 제시하시오.

 

HDFS에서 하나의 파일은 여러개의 블록으로 나누어져 가능한 여러 데이터 노드에 저장됩니다.

블록의 크기는 기본이 64MB인데, 실제 포로덕션 환경에서는 128MB 많이 사용합니다.

이는 파일 하나는 적어도 하나 이상의 블록을 가져야하고,

블록이 크기가 작지 않기 때문에 작은 크기의 파일을 저장하는 용도론 부적합합니다.

이를 해결하기 위해 

- 작은 파일을 파일로 합쳐 저장

- 파일의 이름과 내용을 키와 값으로 하여 sequence file 저장

- CombineFileInputFormat이용하여 리듀스 작업을 수행

등의 방법들이 있습니다.

 

작은 파일이 많으면 Hdfs 네임노드는 네임스페이스 정보를 메타데이터로 관리하는데 메타 데이터는 메모리에 위치하고 있습니다.

하나의 파일을 저장하는데 150바이트 정도가 필요한데 

대규모의 클러스트 환경에서 작은 파일로 인해 하드웨어 용량을 넘어서게 있다.

이를 해결하는 방법은 

작은 파일을 큰파일로 만들어 저장하거나

로그 데이터와 같은 작은 파일들은 시퀀스 파일을 이용하여 압축하거나 

hdfs 페더레이션을 이용하여 네임노드를 늘려 네임스페이스를 나누어 관리 있도록한다.

 

 

=====================

 

 

 

 

 

 

1. MapReduce 대해 설명하시오.

- 하둡이 처음에 지원한 데이터 처리 모델 

- 병렬 처리 문제를 맵과 리듀스 단계로 나누어 수행

- 단계에서는 입력 데이터가 클러스터에서 병렬로 처리되며

  수행하는 맵퍼 함수는 원시 데이터를 키와 값의 쌍으로 변환한다.

  변환된 데이터는 키를 기준으로 정렬돼 bucket으로 서플링된다.

  (같은 키값을 모아 동일한 리듀서로 전달)

- 리듀서 단계에서는 모든 키의 값을 처리하여결과를 HDFS 다른 저장소에 저장한다.

 

맵리듀서의 작업은 크게 맵단계와 리듀스 단계로 나눌 있다.

단계는 입력과 출력으로 키와 값의 쌍을 가지며 타입은 프로그래머가 설정할 있다. 

프로그래머는 맵함수와 리듀스 함수를 작성해야한다.

 

맵리듀스의 등장,-> 작업 -> 단계 설명 -

 

2. SequenceFile이란 무엇이며,이를 사용했을 장점은 무엇인가요?

- 바이너리 키와 값으로 구성

 

- MapReduce에서 입출력 방식으로 많이 사용된다.

 

- 키와 값을 압축하거나 블록 단위로 압축하여 사용된다.

 데이터 압축을 통해 데이터 사dl즈를 줄여 네트워크 트래픽을 줄일 있다.

 

1. 바이너리 형태의 키와 쌍에대한 영속적인 데이터 구조 형태를 제공

2. 작은 파일을 위한 컨테이너로도 작동

sequenceFile 포장하여 작은 파일을 저장하여 처리하도록

 

3. 데이터 압축을 위해 사용될 있다.

압축하거나, 키와 값을 압축하거나 블록 형태로 압축 있다.

압축을 통해 데이터의 사이즈를 줄여 네트워크 트래픽을 줄일 있다.

 

 

3.Combiner 무엇이며, 사용하는 이유는 무엇인가요?

- Map 클래스와 Reduce클래스 사이에서 사용되어 Map Reduce간의 데이터 전송량을 줄이는 역할을 한다.

- 주요 기능은 맵에서 출력된 레코드를 동일한 키로 요약하여 Reduce 전달한다.

 

네트워크 대역폭엔 한계가 있기 때문에 데이터 전송을 최소화하기 위해 

하둡의 맵의 결과를 처리하는 컴파이너 함수를 제공한다.

 

 

4. Hadoop Streaming 대해 설명하시오.

- 하둡 배포와 함께 제공되는 유틸리티.

- 스크립트나 실행파일을 이용하여 MapReduce작업을 실행할 있는 유틸리티

 

하둡과 사용자 프로그램사이의 인터페이스로 유닉스 표준 스트림을 이용한다.

스트리밍은 특성상 텍스트에 적합하다.

리듀스 프로그램을 다른 루비나 파이썬 등을 통해 작성할 있다.

 

 

 

5. 텍스트 파일의 단어 세기를 MapReduce 작성하고, 동작을 설명하시오.

 

- 텍스트 데이터를 HDFS 저장한다.

- 하둡은 자동으로 데이터를 블록 단위로 쪼개어 분산 중복 저장한다.

- 여러 개로 분산된 매퍼가 블록을 읽어 텍스트 데이터 단어를 / (단어/개수) 쌍으로 만든다.

- /값이 생성되면 매퍼에서 같은 키를 모아 셔플링한 리듀서에 전달한다.

- 리듀서는 같은 (단어) 가진 (개수) 모두 더한다.

- 리듀서는 단어별 개수의 결과를 파일에 기록한 , HDFS 저장한다.

 

'BigData > hadoop' 카테고리의 다른 글

빅데이터 하둡 프로그래밍 공부 정리  (0) 2020.08.04