본문 바로가기
Data/Study

[Spark] Apache Spark란? | 빅데이터 처리단계-분산처리/하둡/맵리듀스

by 카프리썬 2021. 4. 22.
728x90

spark를 알기위해 거의 다왔다.

빅데이터 처리단계로 수집과 저장단계를 지나 처리단계이다.

 

처리

데이터분석을 하기에 앞서 몇가지 데이터처리가 필요하다. 즉 분산처리가 필요하다.

 

병렬처리 vs 분산처리

분산처리란 해야하는 한가지 일을 여러 컴퓨터들에게 나누어서 동시에 처리한 뒤 한곳으로 모으는 방법이다..

cpu들을 네트워크로 연결하여 전체적인 일을 부분부분으로 나누니까 더 빨리 처리할 수 있다.

 

병렬처리란 동시에 많은 계산을 하는 방법이다. 여러일을 동시에 한꺼번에 처리하는 것이다. 

 

이 둘의 공동점은 일을 '동시에' 처리한다는 것이다. 

하지만 분산처리는 동시에 여럿이서 하나의 일을 하고, 병렬처리는 동시에 여러일을 처리한다. 

 

 

어떻게 처리하는데? 처리방법이 있나?

1.일괄처리(Batch 처리)

컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식이다.

즉, 일정기간 또는 한정된 데이터를 모아두었다가 쌓인 데이터를

여러서버로 분산해 각 서버에서 나누어 처리하고, 이를 다시 모아 결과를 정리하는 분산처리기술

예를 들어, 구글 맵리듀스, 하둡맵리듀스 등이 있따. 

2.실시간처리

데이터가 들어오는 대로 일련의 처리업무를 수행하여 그 결과를 연속적으로제공한다 

시스템을 모니터링한다거나, 로그관리시스템, 복합이벤트를 처리하는 경우 사용된다

예를 들어 트위터의 strom(스톰)을 사용한다

출처 https://seoyoungh.github.io/data-science/distribute-system-5/#%EB%B0%B0%EC%B9%98-%EC%B2%98%EB%A6%AC

빅데이터 처리기술를 조금 자세히 살펴보면 이런용어들을 접하게 된다

1.하둡

대용량 데이터 분산처리 오픈소스 프레임워크

구글이 개발한 맵리듀스를 오픈소스로 구현한 결과물로 분산처리시스템의 기반이다.

 

하둡은 하나의 성능 좋은 컴퓨터를 이용하여 데이터를 처리하는 대신,

적당한 성능의 범용 컴퓨터 여러 대를 클러스터화하고,

큰 크기의 데이터를 클러스터에 병렬로 동시에 처리하여 

처리속도를 높이는 목적으로 분산처리를 한다. 

 

4개의 주요모듈

-Common: 공통 컴포넌트

-HDFS : 분산"저장"을 위한 모듈, 하나의 서버처럼 묶어서 저장하는 파일시스템

-YARN : 병렬처리를 위한 클러스터 "자원관리 및 스케쥴링" 담당

-Mapreduce : 분산"처리"를 위한 모듈, 분산되어 저장된 데이터를 병렬로 처리해주는 담당

-Ozone : 오브젝트 저장소   

하둡을 기반으로 에코시스템을 구축하여 다양한 처리가 가능하다 

 

"데이터를 읽고 처리하는 속도가 데이터의 양을 따라잡지 못한다" 라는 문제에서 출발했다.

- 하드디스크는 1TB인데, 3TB 데이터를 저장하고 싶다면?

- 100개의 파일에 대해서 똑같은 작업을 하고 결과를 다시 합치는 작업을 하고 싶다면? 
- TB단위이상의 데이터를 빠르게 처리하고 싶다면?

위의 경우 하둡이 필요한 경우이다. 

 

하둡의 특징으로는 "scalable"과 "distibutied computing"
scalable은 확장가능하다라는 뜻으로

자원을 추가하더라도 코드를 수정할 필요없이 동일한 방법으로 프로세싱을 할 수 있다는 것이다.

distributed computing은 분산컴퓨팅을 의미하며

job을 적절한 크기로 쪼갠 후, 분산된 자원을 통해 계산하고 결과를 합치는 작업을 의미한다.

 

하둡의 장점

-오픈소스 라이선스로 비용부담이 적음 

-시스템중단없이 장비추가 용이, 확장가능(scalable)

-일부장비에서 장애가 발생하더라도 전체 시스템 사용성에 영향이 적음 (distributed computing)

-저렴한 구축비용과 비용대비 빠른 데이터처리

 

하둡의 단점

-HDFS에 저장된 데이터를 변경불가

-실시간 데이터분석같이 신속하게 처리하는 작업 부적합

-너무 많은 버전, 너무 어려운 설정, 부실한 서포트 

 

2.맵리듀스(Map-reduce)

"분산컴퓨팅"을 위한 프레임워크.

간단한 단위작업을 반복하여 처리할 때 사용하는 프로그래밍 모델로

문제를 쉽게 병렬화 할 수 있게 나눈 후, 클러스터 전체에서 이들을 조정하며 계산하는 패러다임이라고 볼수도 있다. 

 

기본적으로 입력데이터를 스토리지에 읽고,

독립적인 청크로 나누고 이를 병렬적으로 처리하는 것이다. 

하둡의 파일시스템(HDFS)에서 데이터를 불러오고 저장할 수 있다.

 

그런데 나는 분산컴퓨팅 조차도 모른다..(수업때 좀 들어볼껄..)

분산컴퓨팅을 이해해보자.

 

예를 들어

하나의 문서마다 'dog','cat',fish' 등 단어의 빈도수를 세서 결과를 보여주는 프로그램이 있다.

그런데 우리는 100개의 문서가 있고, 100개이상의 컴퓨터를 보유하고 있다.

그리고 한 컴퓨터에서는 평균 1개의 문서만 로드할 수 있는 상황이다. 

그럼 어떻게 모든 문서에서 빈도수를 카운팅 할 것인가?

간단하게 생각하면

100개의 컴퓨터에서 각각 1개의 문서에 대해서 빈도수를 세면 된다.

그리고 각각의 결과를 합치면 된다.

이것도 분산컴퓨팅의 일종이다. 

하지만 생각보다 고려할 점이 많고 여간 간단한 일이 아니다. .

-어떻게 컴퓨터들이 서로 각각 하나씩 처리할껀데?

-실행도중에 100개 컴퓨터중 몇개의 컴퓨터에서는 갑자기 오류가 나면 어쩔래?

-어떻게 각각 컴퓨터들이 처리한 결과를 하나로 합칠건데? 

-문서의 크기도 다 다른데 각각 컴퓨터들에게 어떤 문서를 어떻게 할당할건데?  

그래서 이렇게 다양한 상황을 고려한 하나의 분산컴퓨팅 프레임워크 즉 맵리듀스가 생겨난 것이다. 

 

즉, 맵리듀스는 '분산컴퓨팅을 실제로 어떻게 할 건데??'에 대한 답변이 된다. 

 

 

맵리듀스로 하는 분산컴퓨팅방법

맵리듀스는 크게 맵과 리듀스로 나누어진다.

맵은 간단한 단위작업을 처리하고, 리듀스는 맵작업 결과물을 모아서 집계한다.

맵과 리듀스는 병렬로 처리가 가능한 작업으로 여러 컴퓨터가 동시에 작업을 처리하여 속도를 높일 수 있다. 

맵 : 인풋데이터 -> (KEY,VALUE)  

리듀스: (KEY,VALUE) -> 최종결과

 

 

맵리듀스 문제점

맵리듀스로 생성된 최종결과를 다른 JOB에서 사용하려면 HDFS에 저장해야한다.

그리고 느리다. 

반복작업을 수행할때마다 파일시스템에 접근하기 떄문에 메모리가 아니라 '디스크'에서 읽어온다.

실시간 데이터에 대한 니즈가 증가하면서 하둡으로 처리하기엔 속도가 너무 느렸던 것이다. 

그래서 스파크가 등장했다

Spark는 Hadoop이 HDFS와 MapReduce로 구성하여 데이터를 처리하는 것보다 10~100배 빠르다.

왜냐, '메모리'에서 데이터를 읽어오기 때문이다.

인메모리상에서 동작하기 때문에 반복적인 처리가 필요한 작업에서 더 빨랐따.

이것이 스파크를 선호하는 이유가 되었다. 

 

 

아무래도 하둡만 따로, 맵리듀스만 따로 해서 더 깊게 공부해봐야겠다.

 

출처 

분산처리 vs 병렬처리 velog.io/@mrnglory/%EB%B6%84%EC%82%B0%EC%BB%B4%ED%93%A8%ED%8C%85-%EB%B3%91%EB%A0%AC%EC%BB%B4%ED%93%A8%ED%8C%85

반응형