Hadoop(하둡)

June·2022년 1월 8일
0
post-thumbnail

(오늘은 [t아카데미-아파치 하둡 입문]강의를 듣고 난 후에 배운 내용을 정리해보겠다.)

먼저 빅데이터란?


과거에는 통상적으로 사용되는 데이터 정보량의 한계를 넘어서는 크기의 데이터를 말하는 의미로 Bigdata라고 불렀으나, 현재는 워낙 우리가 방대한 데이터 홍수의 시대에 살고있기 때문에 그냥 데이터를 빅데이터라고 통용하여 부르곤 한다.
이러한 빅데이터 시대속에 하둡은 정형데이터 뿐만이 아니라 비정형데이터까지 포함한 빅데이터를 다루기 위한 가장 적절한 플랫폼이다.

Hadoop이란?


분산 환경에서 빅데이터를 저장하고 처리할 수 있는 자바 기반의 오픈 소스 프레임 워크이며,
하둡 소프트웨어 라이브러리는 간단한 프로그래밍 모델을 사용하여 여러대의 컴퓨터 클러스터에 대규모 데이터세트를 병렬로 동시에 분산 처리하여 처리속도를 높이게 해주는 프레임워크다.

하둡 코어 프로젝트 : HDFS(분산 데이터 저장), MapReduce(분산 처리)
하둡 서브 프로젝트 : 나머지 프로젝트들 -> 데이터 마이닝, 수집, 분석 등을 수행한다.

Hadoop 생태계(구성 요소)

분산 코디네이터

  • Zookeeper
    분산환경에서 서버간의 상호 조정이 필요한 다양한 서비스를 제공하는 시스템이다.
    분산 동기화를 제공하고 그룹 서비스를 제공하는 중앙 집중식 서비스로 알맞은 분산처리 및 분산 환경을 구성하는 서버 설정을 통합적으로 관리 한다.

분산 리소스관리

  • YARN
    작업 스케줄링 및 클러스터 리소스 관리를 위한 프레임워크로 맵리듀스, 하이브, 임팔라, 스파크 등 다양한 애플리케이션들은 얀에서 작업을 실행한다.

데이터저장

  • HBase (분산 데이터베이스)
    HBase는 구글 Bigtable을 기반으로 개발된 비관계형 데이터베이스이며, Hadoop및 HDFS위에 Bigtable과 같은 기능을 제공하게 된다. 네이버 라인 메신져에 HBase를 적용한 시스템 아키텍쳐를 발표 하기도 했다.
  • HDFS (분산파일데이터저장)
    애플리케이션 데이터에 대한 높은 처리량의 액세스를 제공하는 분산 파일 시스템

데이터수집

  • Chukwa
    Chukwa는 분산 환경에서 생성되는 데이터를 안정적으로 HDFS에 저장하는 플랫폼이다.
    대규모 분산 시스템을 모니터링 하기 위한 시스템으로, HDFS및 MapReduce 에 구축되어 수집된 데이터를 최대한 활용하기 위한 모니터링 및 유연한 툴킷을 포함한다.

  • Kafka
    카프카는 데이터 스트림을 실시간으로 관리하기 위한 분산 시스템으로, 대용량 이벤트 처리를 위해 개발 되었다.

데이터처리

  • Spark
    대규모 데이터 처리를 위한 빠른 속도로 실행시켜 주는 엔진이다.
    스파크는 병렬 애플리케이션을 쉽게 만들수 있는 80개 이상의 고급 연산자를 제공하며 파이썬,R등에서 대화형으로 사용할 수 있다.

  • Hive
    하둡기반 데이터 솔루션으로, 페이스북에서 개발한 오픈소스로 자바를 몰라도 데이터분석을 할수 있게 도와 준다.
    SQL과 유사한 HiveQL이라는 언어를 제공하여 쉽게 데이터 분석을 할 수 있게 도와 준다.

  • MapReduce
    MapReduce 는 대용량 데이터를 분산 처리 하기위한 프로그램으로 정렬된 데이터를 분산처리Map하고 이를 다시 합치는 Reduce 과정을 거친다.하둡에서 대용량 데이터 처리를 위한 기술중 큰 인기를 누리고 있다.

HDFS(Hadoop Distributed File System)

하둡에서 블록(Block)이란?

  • 하나의 파일을 여러 개의 Block으로 저장
  • 설정에 의해 하나의 Block 은 64MB 또는 128MB 등의 큰 크기로 나누어 저장
  • 블록 크기가 128MB 보다 적은 경우는 실제 크기 만큼만 용량을 차지함

하둡에서 블록(Block)은 128MB정도로 매우 단위가 큰 이유는?

  • 탐색 비용을 최소화할 수 있다.
  • 블록이 크면 하드디스크에서 블록의 시작점을 탐색하는 데 걸리는 시간을 줄일 수 있고, 네트워크를 통해 데이터를 전송하는데 더 많은 시간을 할당이 가능함.

블록 크기 분할과 추상화에 따른 이점

  • 안정성(availability)을 높이기 위하여 블록은 여러 노드에 복제됨
  • 같은 파일을 분산 처리하여 데이터 처리 성능을 개선할 수 있음

블록의 지역성(Locality)

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

HDFS의 구조

하둡 네트워크에 연결된 기기에 데이터를 저장하는 분산형 파일 시스템으로 HDFS는 하둡 프레임워크를 위해 자바 언어로 작성된 분산 확장 파일 시스템이다. HDFS는 여러 기계에 대용량 파일을 나눠서 저장을 한다.

특징

  • HDFS는 데이터를 저장하면, 다수의 노드에 복제 데이터도 함께 저장해서 데이터 유실을 방지한다.
  • HDFS에 파일을 저장하거나, 저장된 파일을 조회하려면 스트리밍 방식으로 데이터에 접근해야한다.
  • 한번 저장한 데이터는 수정할 수 없고, 읽기만 가능해서 데이터 무결성을 유지한다.
  • 데이터 수정은 불가능하지만 파일 이동, 삭제, 복사할 수 있는 인터페이스르 제공한다


HDFS는 네임노드(Name node)와 데이터노드(Data node)로 구성되어 있으며, 네임 노드에서 메타데이터를 관리하고 데이터 노드에 블록 단위로 나뉜 데이터가 분산되어서 저장되어지게 된다.

파일 저장 플로우

  1. 어플리케이션이 HDFS 클라이언트에 파일저장을 요청하면, 클라이언트는 네임 노드에 파일 블록들이 저장될 경로 생성을 요청하게 되고, 네임 노드는 해당 파일 경로가 존재하지 않으면 경로 생성 후 다른 클라이언트가 해당 경로를 수정하지 못하게 lock
    이후 네임노드는 클라이언트에게 해당 파일 블록들을 저장할 데이터 노드의 목록 반환

  2. 클라이언트는 첫번째 데이터 노드에게 데이터 전송

  3. 4, 첫번째 데이터 노드는 데이터를 로컬에 저장한 후 데이터를 두번째 데이터 노드로 전송. 이후 계속 전달전달

  4. 로컬에 데이터를 저장하였면 자기에게 넘겨준 데이터 노드에게 데이터 로컬 저장이 완료되었음을 응답.(ack)

  5. 첫번째 데이터 노드는 클라이언트에게 데이터 저장이 완료되었음을 응답.

파일 읽기 플로우


1. 어플리케이션이 클라이언트에게 파일 읽기 요청
2. 클라이언트는 네임 노드에게 요청된 파일이 어떤 블록에 저장되어있는지 정보 요청
3. 메타 데이터를 통해 파일이 저장된 블록 리스트를 반환
4. 클라이언트는 데이터 노드에 접근하여 블록 조회 요청
5. 데이터 노드는 클라이언트에게 요정된 블록을 전송
6. 클라이언트는 어플리케이션에 데이터를 전달.

맵리듀스(MapReduce)


대용량의 데이터 처리를 위한 분산 프로그래밍 모델, 소프트웨어 프레임워크로 맵 리듀스 프레임워크를 이용하면 대규모 분산 컴퓨팅 환경에서 대량의 데이터를 병렬로 분석 가능하다.

정렬된 데이터를 분산처리(Map)하고 난 후 -> 필터링과 sorting을 거쳐서 -> 이를 다시 합쳐서 데이터를 뽑아내는(Reduce)과정
{'Map은 Key, Value의 형태를 가지고 있다'}

맵리듀스 잡(MapReduce Job) : Client 수행 작업 단위

클라이언트가 수행하려는 작업 단위로써, 입력 데이터, 맵리듀스 프로그램, 설정 정보로 구성되어있다.
하둡은 Job을 Map Task와 Reduce Task로 작업을 나누어서 실행한다.

Job : 실행 과정을 "제어"해주는 노드

맵 리듀스 시스템은 Client, JobTracker, TaskTracker로 구성된다.

  • Client : 분석하고자 하는 데이터를 잡(JOB)의 형태로 JobTracker에게 전달
  • JobTracker : 네임노드에 위치. 하둡 클러스터에 등록된 전체 잡(job)을 스케줄링하고 모니터링.
  • TaskTracker : 데이터노드에서 실행되는 데몬. Task를 수행하고, 잡 트래커에게 상황 보고

출처

  1. https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=188
  2. https://butter-shower.tistory.com/71
  3. https://wikidocs.net/22654
profile
회사와 “함께” 성장하는 개발자

0개의 댓글