아파치 스파크는 단순히 빅데이터 작업을 빠르게 해줄 뿐 아니라 간편하고 편리하며 강력하게 할 수 있도록 해준다. 아파치 스파크는 다양한 툴로 구성돼 있다. 이들 아파치 스파크 툴은 새로운 기능이 추가되거나 성능이 개선되는 등 지속적으로 업데이트되고 있다.
아파치 스파크 생태계 안에 있는 각 툴의 역할과 존재 이유, 개선 과정, 문제 요소, 개선 방향에 대해 소개한다. 모든 이미지 출처 : Dawn Hudson via Public Domain Pictures ciokr@idg.co.kr
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
스파크 코어(Core)
아파치 스파크의 중심에는 일명 스파크 코어가 있다. 스파크 코어는 작업 일정 관리 및 조정 외에도 스파크 내의 데이터인 RDD(Resilient Distributed Dataset)를 추출할 수 있는 기본적인 기능을 제공한다.
RDD는 2가지 데이터 기능, 트랜스포메이션과 액션을 수행한다. 트랜스포메이션은 기존 RDD를 새로운 RDD로 바꿔주는 데이터 치환이다. 액션은 기존 RDD(예를 들면 오브젝트 카운트 함수)를 바탕으로 결과를 계산하는 것이다.
스파크는 트랜스포메이션과 액션이 메모리 안에 이뤄지기 때문에 빠르다. 액션은 데이터 요청이 있을 때만 작업을 수행하기 때문에 ‘게으르다(lazy)’는 평가를 받는다. 그러나 그 이유에 대해서는 알아내기 어려울 때가 있다.
스파크의 속도는 발전 중이다. 자바 메모리 관리가 스파크 작업 속도를 저하시키는 경향이 있으며, 이를 위해 아파치 스파크 팀이 자바 메모리와 GC(Garbage Collection)를 사용하지 않고도 메모리 효율을 높이고자 프로젝트 텅스텐을 통해 연구 중이다.
스파크 API
아파치 스파크가 주로 스칼라로 작성되기 때문에 주요 API도 오랫동안 스칼라 중심이었다. 그러나 이제 스칼라보다 광범위하게 사용되는 3가지 언어인 자바, 파이썬, R도 지원된다.
대부분은 이 중에서 자신에게 가장 편안한 언어를 선택할 것이다. 필요한 기능이 해당 언어에서만 바로 지원될 수 있기 때문이다. 그런데 한 가지 단점이 있다. 스파크R의 머신러닝 지원 수준이 즉시 이용 가능한 다른 알고리즘과 비교하면 상대적으로 미흡하다는 점이다. 그러나 이는 시간이 지나면 차차 개선될 것으로 보인다.
스파크 SQL
데이터셋 SQL 쿼리 작업의 성능을 과소평가하지 마시라! 스파크 SQL은 ODBC/JDBC로 연결되는 쿼리 등 스파크 데이터의 SQL 쿼리 처리 시 필요한 기본 매카니즘을 제공한다. 정식 데이터 소스는 필요하지 않다. 스파크 1.6. 버전부터 아파치 드릴(à la Apache Drill)의 플랫 파일 쿼리 처리가 지원되기 시작했다.
스파크 SQL에서는 결과 데이터를 새로운 스파크 데이터 소스에 작성하는 것이 가능하다(예를 들면 파케이 테이블(Parquet table)). 그러나 업데이트 쿼리는 지원되지 않는다. 그러한 기능은 기대하지 않는 편이 좋다. 대부분의 스파크 SQL 관련 업데이트는 스파크 스트리밍을 고려한 성능 향상 차원이기 때문이다.
스파크 스트리밍
아파치 스파크의 디자인은 스트리밍 처리를 비롯해 다양한 처리 방법을 지원할 수 있게끔 해준다. 그래서 스파크 스트리밍이다. 스파크 스트리밍 특유의 속성(rawness) 덕택에 잠깐의 레이턴시도 원치 않을 때 혹은 가령 아파치 스톰과 같은 다른 스트리밍 처리 솔루션에 아직 투자하지 않은 경우에도 바로 사용 가능하다는 인식이 널리 퍼져있다.
그러나 아파치 스톰의 인기는 식고 있다. 오래된 스톰 사용자인 트위터는 자체 프로젝트 헤론으로 전향했다. 거기에다 스파크 2.0은 새로운 ‘구조화된 스트리밍’ 모델을 전제로 한다. 이는 스파크의 머신러닝 라이브러리 사용을 포함, 실시간 데이터의 쌍방 스파크 SQL 쿼리 처리를 가능하게 해주는 모델이다. 경쟁에서 살아남을 만큼 성능이 개선될지 여부는 지켜봐야 할 테지만 주시할 가치는 있다.
MLlib(Machine learning)
머신러닝은 경이롭다는 평가와 까다롭다는 평가를 동시에 받고 있다. 아파치 스파크를 사용하면 상당수의 기본형 머신러닝 알고리즘을 구동할 수 있다. 아파치 스파크는 분석 시 사용자 편의성 및 접근성을 보다 높여준다.
MLlib에서 사용 가능한 알고리즘 목록은 다양할 뿐만 아니라 업데이트 때마다 확대되고 있다. 그렇지만 딥러닝 관련 알고리즘 등 일부 알고리즘은 아직 이용할 수 없는 상황이다. 이런 점을 써드파티 업체들이 스파크의 인기를 이용해 메우고 있다. 가령 야후는 아파치 스파크 기반의 딥러닝 시스템인 카페온스파크를 제공하고 있다.
그래프X(Graph computation)그래프X는 수백, 수천 개의 값이 서로 어떻게 연관되는지 보여주는 그래프 API다. 그래프X를 사용하면 다양한 방법으로 데이터 그래프 작업이 가능하다. 그래프를 구성·변형하는 번거로운 작업을 아파치 스파크에 일임할 수 있는 것. 또한 그래프X는 페이지랭크, 레이블 프로파게이션 등 여러 가지 기본형 데이터 처리 알고리즘을 지원한다.
현재 그래프X의 한 가지 주요 단점은 평면 그래프에만 적합하다는 점이다. 새로운 값을 그래프에 추가할 때 성능이 심각하게 저하된다. 게다가 정식 그래프 데이터베이스 솔루션을 이미 사용 중이라면 그래프X로 대체할 이유는 더더욱 없을 것이다.
스파크R(R on Spark)R 언어는 통계적·수학적 분석과 머신러닝 작업이 가능한 환경을 제공한다. 아파치 스파크는 작년 6월부터 파이썬 및 스칼라 지원 수준으로 R 언어를 지원하기 시작했다.
개발자들이 R 언어를 사용할 수 있게 됐다는 점 외에도 아파치 스파크는 R 프로그래머들이 그 전에는 할 수 없었던 여러 가지 작업을 가능하게 해준다. 가령 머신 1개의 메모리 용량을 넘어서는 데이터셋을 처리하거나, 다수의 스레드 또는 다수의 기계에서 동시에 분석하는 작업이 가능한 것이다.
스파크R은 R 프로그래머들이 일반화 선형 모형 구축 시 필요한 MLlib을 사용할 수 있게 해준다. 안타깝게도 모든 MLlib이 지원되는 것은 아니지만, 개정 버전이 나올 때마다 지원 정도가 개선되고 있다.