인메모리 병렬분산처리 플랫폼, 아파치 스파크(Apache Spark)

    1. 아파치 스파크(Apache Spark)란?



    아파치 스파크(Apache Spark)는 빅데이터(Bigdata) 처리를 위해서 등장한 오픈소스 병렬분산처리 솔루션, 플랫폼이다. 빅데이터가 한창 떴던 당시 전세계는 빅데이터 열풍과 동시에 "빅데이터 = 하둡(Hadoop)"이라는 생각을 했을 만큼 하둡의 등장은 센세이션 했었다.


    문제는 하둡의 등장은 2010년 즈음이고, 그때와 지금과는 데이터가 하늘과 땅차이가 날 정도로 패러다임이 다시 바뀌게 되었다. 하둡은 기본적으로 HDFS(Hadoop Distributed File System)라고하는 분산 저장 파일 시스템과 맵리듀스(MapReduce)라고 하는 데이터 처리 방식으로 인해서 한 획을 그었는데 문제는 HDFS는 디스크의 I/O를 사용하는 것이고, 결국 데이터를 빠르게 처리할 수 없게 되었다.


    apache spark logo


    그와 동시에 컴퓨터의 HW의 가격은 내려가면서, 메모리를 꽤 고용량으로 장치할 수 있게 되었다. 그래서 이제는 서버에 메모리를 128GB 이상 다는 경우는 매우 흔한 일이고, 굳이 HDFS(디스크)를 쓸 이유가 없어진 것이다.


    그와함께 뜨기 시작한 것이 인메모리 상에서 스트림처리를 효과적으로 수행하고, 병렬처리를 쉽게하며 최근에 뜨고 있는 머신러닝의 요구사항마저 수용할 수 있는 스파크가 대세를 이루게 되었다. 이제는 빅데이터 관련된 업무를 한다고 하면, "스파크"를 할 줄 안다로 말할 수 있을 정도로 현재 최전방에서 공격수 역할을 하는 플랫폼이다.


    스파크의 역사는 버클리 캠퍼스의 AMPLab 연구 프로젝트로 2009년도에 등장했다가 2010년 초 오픈소스로 공개 된 이후 2013년 아파치 인큐베이터 프로젝트에 선정된 이후 스파크가 되었다. 



    2. 스파크의 구조



    스파크는 복수의 Component로 구성이 된다. 병렬분산처리 엔진스파크 코어(Spark Core)를 중심으로 SQL을 담당하는 스파크 SQL, 스트림처리를 담당하는 스파크 스트리밍, 머신러닝을 담당하는 MLlib, 그래프 처리를 담당하는 그래프X 가 있다. 구조 명칭과 하는 일이 일치하기 때문에 어떤 업무를 하는지는 직관적으로 알 수 있다. 



    스파크는 하둡의 HDFS만 읽는 것이 아니라 많은 DB와 호환이 된다. Hive, HBase, PostgreSQL, Mysql, Maria, CSV 등의 DB 및 파일도 읽어 들일 수 있다. 



    3. 스파크의 장단점



    장점

    • 고속성 : Disk I/O를 사용하지 않아서, 하둡의 비해 몇십배이상 빠른 연산처리를 자랑한다
    • 다양한 컴포넌트 : 데이터 처리를 위한 다양한 컴포넌트들을 보유하고 있다
    • 오픈소스 : Apache 프로젝트 이기에 무료로 이 강력한 기능을 사용할 수 있다
    • 다양한 언어 지원 : 다양한 언어(Java, Scala, Python 등)을 지원하고 사용 방법이 쉽다(Easy of use)

    로직스틱 회귀 모델에서의 스파크 성능은 하둡보다 100배 이상의 성능을 보여준다


    Java, Scala, Python, R 등에서 핸들링이 가능하다



    단점

    • 높은 메모리 필요 : 인메모리 기반 프레임워크이다 보니, 높은 메모리가 필요하다
    • 반복적인 처리에 적합 : 연속적인 처리에 유리하다. 한번만 수행하는 작업은 전혀 유리할 것이 없다
    • 불안정 : 아직까지는 솔루션으로 안정적이지 못한 부분이 존재한다 1년전까지만 하더라도 프레임워크가 죽는 경우가 자주 발생했었다




    스파크는 핵심적인 기능에 적합하지는 않다. 즉 Core 서비스에 적용하다간 낭패를 볼 가능성이 높다. 바로 단점에 적어놓은 불안정함 때문인데, 메모리 기반의 처리이기 때문에 속도에 올인한 솔루션이라고 쉽게 생각하면 된다. 마치 데이터를 전송할 때, UDP가 TCP보다 훨씬 빠르지만 Data를 Loss 하는 것과 같은 트레이드 오프(Trade Off)라고 보면 된다.


    스파크를 사용할 때는 실시간으로 처리를 해야 좋지만, 가끔씩 작동이 실패되어도 서비스에 지장이 없는 기능에 넣으면 좋을 것이다.




    4. 스파크의 성공 사례



    스파크는 다양한 성공 사례가 있고, 현재 지금도 많은 성공사례들이 있을 것이다. 카프카(Kafka)랑 연동하여 실시간으로 들어오는 매우 많은 빅데이터들을 실시간으로 처리하는 스트리밍 처리 방식은 여전히 유용하고 강력하며, 머신러닝을 활용한 데이터 분석과 추천시스템등은 찾기가 너무 쉬울 정도로 방대하다.


    금융권에서는 Risk 분석 솔루션에 스파크를 넣거나, FDS 같은 시스템에 넣는 경우도 많다. 현재 빅데이터를 쓰는 거의 모든 솔루션에 스파크는 들어갈 수 있다고 봐도 무방하다. 


    스파크에서 가장 핫한 컴포넌트는 스트리밍과 MLlib라고 생각한다. 가트너가 발표한 것처럼 분석과 인공지능의 관심이 최고조에 달한 이시기에 실시간 분석 = Spark 라고 생각하는 것이 최소한 국내에서는 정설로 굳혀지고 있는 실정이다.


    물론 딥러닝같은 분석은 할 수 없겠지만, 기계학습 기반의 라이브러리는 꽤 강력하다. 일반 언어에 종속적인 언어로 개발한 것보다 속도가 훨씬 빠르기 때문에 일반 배치성에서도 자주 사용하고 있고, 스트리밍 처리에서 이미 압도적으로 우위를 보이고 있기 때문이다.


    또 많은 개발자들이 데이터 분석 솔루션으로 스파크를 많이 사용하고 있는 것도 한 몫을 하고 있다. 특히 자바 개발자들에게 데이터 분석을 하라고 한다면 머하웃이나 스파크를 생각할 수 있는데(딥러닝이라면 DeepLearning4J가 있을 수 있겠지만) 그만큼 개발자에게 친숙한 환경(이질감이 덜 들기 때문에)이기 때문에 더욱 뜰 수 있는 요인이라고 본다

    댓글

    Designed by JB FACTORY