RevoScaleR 개요
R은 풍부한 기능 및 패키지 세트를 가지고 있는 데이터 분석 및 모델링에 이상적인 매우 유명한 프로그래밍 언어입니다. 전통적으로 R은 모든 객체(데이터 세트 포함)를 메모리 객체로 로드하여 작동합니다. 이로 인하여, 대용량의 데이터를 다룰 때, 메모리에서 사용 가능한 공간의 양은 빠르게 줄어들 수 있습니다. 여유 메모리가 부족한 리소스로 빠르게 바뀔 수 있기 때문에, 이는 특히 많은 사용자가 동일한 R 서버에서 작업 할 때 문제가 됩니다. 그동안 많은 R 패키지들이 이러한 한계를 극복하려고 시도하여 왔습니다. 일부 패키지들을 더 큰 데이터 크기의 작업을 할 수 있도록, 데이터를 보다 효율적으로 로드하고 처리하는 방법을 제안합니다. 그러나 이러한 방식의 효율성의 추구는 결국 벽에 부딪히기 때문에, 일정 수준의 개선 만이 가능합니다. R을 효율적으로 사용하려면 프로그래밍에 대한보다 정교한 지식이 필요한 데, 이는 많은 R 사용자들에게 부족한 것입니다.
Microsoft R Server(MRS)는 기존의 R과는 다른 접근 방식을 취하고 있습니다. MRS의 RevoScaleR 패키지는 디스크(하드 드라이브)에 데이터 집합을 저장하고, 처리하기 위해 한 번에 하나의 단위 집합(chunk, 단위 집합은 사전 지정된 행 수로 이루어 짐)을 메모리로 로드합니다. 하나의 단위 집합이 처리되면, MRS는 데이터의 다음 단위 집합을 로드합니다. 기본적으로 단위집합(chunk) 크기는 50만 개의 행으로 설정되지만, 더 넓은 데이터 세트(많은 컬럼)를 처리 할 때에는 좀 더 낮은 숫자로 변경할 수 있으며, 더 긴 데이터 세트(적은 컬럼)를 처리 할 때는 더 큰 숫자로 변경할 수 있습니다.
RevoScaleR의 데이터는 외부에(디스크에 저장) 저장 되어 있으며 본질적으로 분산되어 있습니다(우리가 단위 집합 방식으로 처리하기 때문에). 이는 MRS는 데이터 처리시에 더 이상 메모리에 구속받지 않는다는 것을 의미합니다. 우리는 하드 디스크에 저장될 수 있는 공간만큼 큰 데이터를 처리할 수 있는 것입니다. 모든 시점에서 메모리 객체(특정 R 객체)에는 하나의 단위집합(chunk) 데이터만 로드되기 때문에, 시스템의 필요 메모리가 지나치게 커지는 일은 결코 발생하지 않습니다. 물론 이 모든 것은 최소한의 사용자 입력으로 백그라운드에서 발생합니다.
하지만 무료 점심 식사 같은 것은 없습니다. 분산 데이터로 작업하기 위해서는 상응하는 비용을 지불해야만 합니다. 대부분의 상용 패키지를 포함한 대부분의 오픈 소스 R 알고리즘은 데이터 프로세싱과 분석을 R 세션 상의 data.frame 객체로 로드된 전체 데이터 세트에 의존하기 때문에, 분산 데이터로는 직접 작업하지 않습니다. 그러나 RevoScaleR 패키지는 다음과 같이 작동합니다.
- 대부분의 데이터 처리 단계 (데이터 클린징, 새 컬럼 작성 또는 기존 컬럼 수정)는 RevoScaleR을 통하여 간접적으로(그리고 상대적으로 쉽게) 분산 데이터 방식으로 처리될 수 있으므로, 상당히 많은 기존 R 코드들의 개선에 활용될 수 있습니다. 간접적으로 분산 데이터를 처리한다는 내용은 앞으로 다루어질 다양한 예제를 통하여 그 의미를 분명히 알게 될 것입니다.
- 더하여 데이터 병합 또는 정렬과 같은 일부 데이터 처리 단계와, 선형 회귀 분석 모델을 작성하는 데 사용되는 lm 함수에 해당하는 대부분의 RevoScaleR 분석 및 통계 알고리즘은 RevoScaleRcounterparts를 가지고 있으며, 이를 통하여 기존과 작동 방식은 동일하지만 data.frame은 물론 분산된 데이터 집합에 대하여도 동작합니다. 예를 들어, RevoScaleR은 lm과 동일한 기능을 하는 rxLinMod 함수를 가지고 있는데, rxLinMod는 분산 알고리즘을 사용하기 때문에 data.frame(data.frame의 크기가 큰 경우 lm보다 훨씬 우수한 성능)과 분산 데이터 집합 둘 모두에서 작동합니다.
RevoScaleR을 사용하면 기존의 R 기능(R의 풍부한 상용 패키지가 제공하는 기능)과 RevoScaleR이 자체 제공하는 분산 처리 기능들을 같이 사용할 수 있습니다. RevoScaleR의 분산 기능이 제공하는 최신 장점 중 하나는 다음과 같은 코드 이식성입니다.
- 오픈 소스 R의 분석 기능은 일반적으로 병렬 처리를 지원하지 않기 때문에, 분산 환경에서 이러한 알고리즘을 사용하는 것은 본질적으로 어려울 수 있습니다. 예를 들어 Hadoop에 작성된 코드를 배포하는 경우, R 코드를 Hadoop이 이해할 수있는 매퍼(mappers) 및 리듀서(reducers)로 다시 작성해야 하는 번거로움이 발생합니다. 반면에 RevoScaleR은 기본적으로 병렬 데이터 처리 및 분석 기능을 바탕으로 하기 때문에, 단일 시스템에서 실행되는 MRS에서 Hadoop 클러스터 또는 기타 분산 환경 하의 MRS로 코드를 포팅하는 데 이상적입니다.
요약
RevoScaleR 패키지가 제공하는 내용은 다음과 같습니다.
- 데이터가 크지만 data.frame으로 여전히 메모리에서 수용할 수 있을 정도인 경우에도, RevoScaleR의 병렬 알고리즘을 사용하여 오픈 소스의 것보다 훨씬 빠르게 데이터에 대한 분석 모델을 실행할 수 있습니다.(예 : lm 대신 rxLinMod 사용 ).
- 데이터가 너무 커서 사용 가능한 메모리를 초과하는 경우, 플랫 파일과 같은 디스크 상의 데이터 또는 XDF라는 외부 분산 형식의 데이터에 대하여 직접 작업을 수행할 수 있습니다. RevoScaleR의 데이터 처리 및 분석 기능은 data.frame 외에 이러한 데이터 형식에도 같이 작동합니다.
- 데이터가 운영시 HDFS나 SQL Server와 같은 분산 환경에 저장되어야 하는 경우, 개발에서 운영으로 배포를 위한 별도 작업을 줄이면서, 약간의 조정 작업만으로 기존 작성된 코드를 배포할 수 있습니다.