아파치 스파크

비교적 최신 프로젝트에 속하는 아파치 스파크는 분산 인-메모리 데이터 처리 프레임워크이다. 스파크는 스칼라와 파이썬을 지원하는 대화형 데이터 처리 기능을 제공하며 이를 통해 데이터 전처리를 매우 효과적으로 수행할 수 있다.
스파크에서 주로 사용되는 추상화 객체는 RDD(Resilient Distributed Dataset)로 다양한 관계 대수 연산자(SELECT, FILTER, JOIN, GROUP BY 등)와 기타 스칼라 및 파이썬 변환 로직의 피연산자로 적용될 수 있다.

최근 RDD를 기반으로 구현된 DataFrame은 좀더 손쉬운 데이터 슬라이싱과 다이싱 기능을 제공하며 파이썬의 Pandas 라이브러리의 슬라이싱/다이싱 API와 유사하다.

스파크는 발전을 거듭해 단순한 RDD 기반의 처리 엔진을 넘은 다양한 기능을 제공한다.

  • 스파크SQL
  • 스파크 스트리밍
  • MLlib(머신러닝)
  • GraphX(그래프 연산)

스파크 SQL은 하이브를 대체할 수 있는 분산 SQL 처리 엔진이며 스파크 코어를 기반으로 구현된 스파크 SQL은 기존 SQL 쿼리문을 지원하며 대규모 데아터 셋을 빠르고 효율적으로 처리하는 관계형 대수 연산 API인 DataFrame을 제공한다. 스파크SQL의 가장 흥미로운 장점은 SQL실행 결과로 얻은 데이터를 디스크에 쓰지않고 바로 스파크로 가져올 수 있다는 점이 있다.

스파크MLlib은 분산 데이터셋에 적용할 수 있는 다양한 머신 러닝 알고리즘을 구현해 스파크 툴셋과 연동한 머신 러닝 라이브러리다. 현재 스파크 MLlib가 지원하는 머신 러닝 알고리즘으로는 선형 및 로지스틱 회귀, 서포트 벡터 머신, 의사 결정 트리, 랜덤 포레스트, k-평균 군집화, SVD(Singular Value Decomposition)등이 있으며 새 릴리스가 나올 때 마다 지우너하는 알고리즘이 늘고있다.

스파크 GraphX는 스파크 기반 그래프 라이브러리와 그래프 병렬 연산 라이브러리로 페이지 랭크(Page Rank), 레이블 전파(Lable Propagation), 삼각 계수(Triangle count)등의 그래프 알고리즘을 지원한다.

스파크 스트리밍은 아파치 스톰과 유사한 스파크 모듈로 확장성과 장애 허용을 갖춘 스파크 스트리밍 애플리케이션을 구축하는 플랫폼이다. 스파크 스트리밍의 스트리밍 기능은 스파크의 기본 API를 확장해 슬라이스 데이터를 처리하는 방식으로 설계되었다. 스파크의 기본 데이터 셋 추상화 객체가 RDD인 반면 스파킄 스트리밍의 데이터셋 추상화 객체는 DStream(DiscretizedStream)으로 데이터 스트림을 개별 세그먼트로 나눈다음 각 세그먼트의 데이터를 스파크 엔진으로 처리한다.

  • 입력 데이터-> 스파크 스트리밍(입력 데이터 마이크로 배치)-> 스파크 엔진(처리된 데이터 마이크로 배치)

추가 설명

SVD(Singular Value Decomposition, 특이값 분해)

  • m x n 차원의 행렬 A에 대하여 mxm 크기의 직교 행렬(U), nxn 크기의 직교 행렬(V), mxn 크기의 직사각 대각행렬(∑)로 분해하는 것을 뜻함
  • 고유값 분해는 행과 열의 크기가 동일한 정방 행렬에 대해서만 가능하지만 특이값 분해는 정방 행렬이 아니여도 가능함

SVM(Support Vector Machine,서포트 벡터 머신)

  • 분류 알고리즘으로 결정 경계(Decision Boundary)를 기준으로 데이터를 분류할 때 쓰임
  • 데이터의 속성이 2개라면 선 형태, 3일 경우는 면의 형태를 가지며 초평면이라 부름
  • 결정 경계는 데이터 군으로부터 최대한 멀리 떨어지는 것이 좋으며 결정 경계와 가까이 있는 데이터 포인트를 Support Vector라고 부름
  • 마진(Margin): 결정 경계와 서포트 벡터 사이의 거리로 최적의 결정 경계는 마진을 최대화하는 것임
  • n개의 속성을 가진 데이터에는 최소 n+1개의 서포트 벡터가 존재한다.
  • 수 많은 데이터 중 서포트 벡터만 잘 분류하면 나머지는 무시할 수 있기 때문에 빠름
profile
안되면 될 때까지

0개의 댓글