Practice makes perfect

[BIGDATA Platform] 빅데이터의 핵심 소프트웨어 : 하둡(Hadoop) 본문

빅데이터/BIGDATA Platform

[BIGDATA Platform] 빅데이터의 핵심 소프트웨어 : 하둡(Hadoop)

kerpect 2020. 6. 11. 21:15

하둡(Hadoop)이란 ?

: 2003년 구글의 파일 시스템이 모태가 돼서 만들어진 것이 HDFS이고, 2004년에 구글이 발표한 맵리듀스(mapreduce)를 적용하여 하둡에 구현이 되어서 2009년에 발표가 되었습니다.하둡의 창시자가 2005년에 검색엔진 프로젝트를 진행하면서 하둡 프로젝트가 시작되었습니다. 구글의 알고리즘을 통해서 완성되었는데 그 당시 구글의 주 핵심기능이 검색 기술이었기 때문에 가능했다고 합니다.(빠른 처리)

 

하둡(Hadoop)의 특징

 

1) 하둡은 여러 개의 저렴한 컴퓨터를 마치 하나인 것처럼 묶어 대용량 데이터를 처리하는 기술입니다.

2) 하둡을 황용하여 빅데이터 분석에 들어가는 초기 비용을 줄이면서 데이터 시스템과의 호환 문제도 쉽게 해결할 수 있습니다.

3) 하둡은 수천 대의 분산된 x86 장비에 대용량 파일을 저장할 수 있는 기능을 제공하는 분산 파일 시스템입니다.

4) 저장된 파일 데이터를 분산된 서버의 CPU와 메모리 자원을 이용해 쉽고 빠르게 분석할 수 있는 컴퓨팅 플랫폼인 맵리듀스로 구성돼 있다.

5) 하둡의 핵심 기술 : 분산 병렬 처리 기술 (HDFS)

 

 

하둡의 부족한 기능을 서로 보완하는 '에코시스템'

 

Flume : 데이터 수집 - 데이터를 수집해서 하둡 파일 시스템에 안정적으로 저장합니다.

HBASE : NoSQL - 대용량의 데이터를 분산된 서버에 구조적으로 저장해 실시간으로 저장합니다.

HIVE : HQL - HQL문을 활용하여 맵리듀스 문을 사용하지 않고 데이터를 처리할 수 있도록 제공합니다.

HUE : UI - 하둡의 모니터링, 관리하는 기능을 수행합니다.

ZOOKEEPER :  분산 코디네이터 - 프로그램 안에서 정보들을 공유, 광리 하는 기능을 수행합니다.

 

이외에도 kafka, pig, 마후트, 스쿱 등이 존재합니다.

 

 

 

하둡 1 아키텍처 (저사양으로 사용 가능 but 안정감이 많이 떨어진다)

하둡 1의 주요 구성 요소

 

NameNode : DataNode에 저장된 파일들의 메타 정보를 메모리상에서 로드해서 관리, 실제 저장소 공간을 총괄합니다. 하지만 NameNode가 error가 나면 모두 하둡 자체가 error 나게 되는 단점을 가지고 있습니다. 또한 하둡은 저사양으로 돌리기 때문에 error가 많이 일어났습니다.

 

DataNode : 블록(하둡 1:64MB , 블록 2:128MB) 당위로 분할된 대용량 파일들이 DataNode의 디스크에 저장 및 관리됩니다. 저장소 역할을 합니다.

 

SecondaryNameNode : NameNode의 Fslmage(NameNode의 메모리상에 올라와 있는 메타 정보를 스냅샵 이미지로 만들어 생성한 파일)와 EditsLog(파일들의 변경 이력(수정, 삭제 등) 정보가 저장되는 로그 파일)파일을 주기적으로 유지 관리해주는 체크 포인팅 노드

 

NameNode와 동일하게 만들어서 NameNode의 백업 용도로 사용하고, 일정 시간마다 저장합니다.

 

MapReduce : 분산 병렬 처리에서 기본은 먼저 수많은 컴퓨터가 있는데 어떻게 일을 효율적으로 나눠서 실행할 수 있느냐이고(Map : key-value , keyword 저장) 두 번째는 수많은 컴퓨터들이 나누서 만든 결과를 어떻게 하나로 모으냐(Reduce)는 것이었는데 이를 MapReduce를 통해서 지원해 줍니다. 데이터에 프로그램을 로드하여 블록 단위로 각각 처리합니다.

하둡 1 에서는 시스템에 탑재되어 구동됩니다.

 

ex) 1G를 1초에 수행하는 데이터가 총 1T 있을 때, 한 개씩 처리하면 1024초가 걸릴 것을 각각 처리하면 1초 안에 모두 수행할 수 있도록 하는 것입니다.

 

JobTracker : 맵리듀스의 잡을 실 행면서 태스크에 할당하고 전체 잡에 대해 리소스 분배 및 스케줄링을 합니다.

                (시간이 많이 걸리며, 오류가 많습니다.)

 

TaskTracker : JobTraker가 요청한 맵리듀스 프로그램이 실행되는 태스크이며, 이때 맵 태스크와 리듀스 태스카가 생성됩니다.

 

 

 

하둡 2 아키텍처 (1버전 대비 안정성이 크게 향상하였습니다.)

NameNode(Active/Stand-By) : NameNode를 이중화해서 서비스 중인 Active NameNode와 실패처리를 대비한 Standby NameNode로 구성되어집니다. 이 둘 사이에 주키퍼를 통해서 데이터를 공유하도록 합니다.

 

JournalNode : 3개 이상의 노드로 구성되어 EditsLog를 각 노드에 복제 관리하여 Active NameNode는 EditsLog에 쓰기만을 수행하고 Standvy NameNode는 읽기만을 실행합니다.

 

MapReduce/YARN : 하둡 클러스터 내의 자원을 중앙 관리하고, 그 위에 다양한 애플리케이션을 실행 밑 관리가 가능하도록 확장성을 과 호환성을 높은 하둡 2의 플랫폼, 리소스 기반으로 응용프로그램처럼 사용합니다.

 

ResouceManager : 하둡 클러스트터 내의 자원을 중앙 관리하면서, 작업 요청 시 스케줄링 정책에 따라 자원을 분해서 실행시키고 모니터링을 합니다(리소스, 메로리, 스케줄만 관리)

 

NodeManager : 하둡 클러스터의 DataNode마다 실행되면서 Container를 실행시키고 라이프 사이클을 관리합니다.

 

Containcer : DataNode의 사용 가능한 리소스(CPU, 메모리, 디스크 등)를 Container 단위로 할당해서 구성합니다.

 

ApplicationManager : 애플리케이션이 실행되면 ApplicationMaster가 생성되며 ApplicationMaster는 NodeManager에게 애플리케이션이 실행될 Container를 요청하고, 그 위에 애플리케이션 실행 및 관리합니다.

 

 

하둡 1 -> 하둡 2 변화

 

1) 안정성을 위해서 NameNode의 이중화(Active NameNode , Stand-by NameNode) + 주키퍼 활용 + JournalNode

 

2) 안정성과 편의성을 위한 JobTracker의 역할 분배

Resource Manager(리소스, 메모리, 스케줄 관리) + ApplicationMaster(mapreduce관리 및 실행)

 

 

 

추가적인 상식)

 

● 만들어진 알고리즘을 open 하는 이유는?

 

1) 프로그램에 대한 빠른

- 다른 개발자들이 다양하게 사용하여 개선되어 짧은 시간 안에 진입 장벽이 낮아져서 많은 사람들이 나타나게 된다고 합니다.

 

2) 하둡을 관리하는 비영리 제단에 의해서 개선되고 안정성을 확보할 수 있지만, 끊임없이 개발사에 의뢰해서 안정화를 위해 사람들을 고용할 수밖에 없습니다.(수익창출)

 

● 안드로이드 운영체제 안에 구글 관련 프로그램이 많은데 왜 구글은 무료로 배포를 할까?

안드로이드로 된 핸드폰이 팔리면 최종적으로 많은 사람들이 구글의 기술을 사용할 수 있게 됩니다. 이처럼  전 세계의 네트워크가 구글로 사용할 수 있도록 만들어가기 위함이라고 합니다. 그래서 많은 부분의 핵심기술들은 구글에 속해있습니다. (합병 딥러닝 : 딥러닝을 돌리기 위한 서버를 팔아 벌기 위함이었다고 합니다.)

 

 

 

 

Hdfs: 분산 병렬 처리 기술 (하둡의 filesystem : hdd , usb와와 같이 저장장치를 통칭)

 

분산 병렬 처리에서의 기본은 먼저 수많은 컴퓨터가 있는데 어떻게 일을

효율적으로 나눠서 실행시킬 수 있느냐고(Map , keyvalue – keyword로 저장), 두 번째는 수많은 컴퓨터들이 나눠서 만든 결과들을 어떻게 하나로 모으냐(Reduce)는 것이다. 이를 하둡의 맵리듀스(MapReduce)가 쉽게 할 수 있도록 지원해 준다. – 단어를 쪼개서 스플릿 한다.

데이터에 프로그램을 로드하여 블록단위로 각각 처리한다(분산 처리).

ex : 1G1초에 수행하는 데이터가 총 1T 있을 때, 한 개씩 처리하면 1024초가 걸릴 것을

각각 처리하면 1초 안에 모두 수행할 수 있도록 한다.

 

EditsLog