[RHadoop] RHadoop(R하둡)을 이용한 간단한 계산 소요시간 테스트 by Kertz

하둡 설치 과정에서 잠깐 벗어나서..

하둡을 통해 R의 분석 기능을 이용할 수 있는 RevolutionAnalytics의 (이름이 멋지다.....) RHadoop을 이용한 예제를 다뤄볼까 한다.
사실 이와 유사한 기능을 하는 패키지들이 많은 것으로 안다. RHipe나 국내 NexR의 RHive 등등...
각 패키지 별로 성능 차이가 존재할 수 있지만, 구글님의 영광을 누릴 수 있는 자료가 제법 많을 듯한 RHadoop을 설치하였다.

먼저 이용된 코드는 RHadoop튜토리얼 코드 중 일부이다. 
영어로 되어있는데 일반적인 계산 방식과 맵리듀스를 이용한 계산 방식의 코드 차이만 있을 뿐 보여주는 결과는 같다.

그래서 한 가지 매우 간단한 실험을 해보았고 그 결과를 여기 기록한다.

■ 실험 개요
1) 1부터 9,000,000까지의 숫자를 생성.
2) 각 숫자 모두를 제곱하는 연산을 수행
3) 계산에 소요된 시간을 측정
4) 실험에 사용한 컴퓨터의 사양은 CentOS 6.3이 설치된 Ram 2G의 구형 서버로 인텔 Xeon 5130 (2.00Ghz) Cpu가 4개 달린 모델.
5) 계산은 동일한 환경과 조건에서 시간차를 두고 수행하였음.

■ 실험 결과

1) R의 sapply 함수를 이용한 연산 결과

R의 기본 함수인 proc.time()을 이용하여 시간을 계산하였다. a.time 변수에 할당한 후 다시 proc.time() - a.time 이라고 쓰면 할당 이후 CPU가 사용된 시간을 기록한다. 여기서 프로그램을 계산하기 위해 사용된 CPU시간은 사용자+시스템 이며 소요된 시간은 최초 할당 이후 흘러간 시간(일반적인 의미의)을 말한다.

위 결과에서는 사용자 시간이 94.342초, 시스템 시간이 0.421초이다. 즉 일반적인 R을 통한 연산 시간은 94.763초가 소요되었다.


2) RHadoop을 이용하여 계산한 결과 (MapReduce)

일반적인 방식과 다른 점은 1부터 9백만까지의 숫자를 to.dfs를 통해 변수해 할당해준다는 점, 그리고 mapreduce 함수를 이용하여 sapply연산을 해준다는 점이 다르다.
계산에 소요된 시간은 78.489초로 나타났음을 알 수 있다. 무려(?) 16초 가량 단축되었음을 확인할 수 있다.


■ 소스코드

1) R
a.time <- proc.time()
small.ints2=1:9000000
result.normal = sapply(small.ints2, function(x) x^2)
proc.time() - a.time


2) RHadoop
b.time <- proc.time()
small.ints= to.dfs(1:9000000)
result = mapreduce(input = small.ints, map = function(k,v) cbind(v,v^2))
proc.time() - b.time




덧글

댓글 입력 영역


웹폰트 (나눔글꼴 8종)