20
RHive 튜토리얼 – 설치 및 설정 RHive 설치 방법들 RHive를 설치하기 위해 소스를 얻으려면 아래의 3가지 방법을 이용할 수 있다. R을 실행한 뒤 install.packages() 함수를 사용해서CRAN으로부터 설치 RHive 프로젝트 홈페이지에서 빌드된 R 패키지를 다운로드 받은 후 R CMD명령어를 를 이용해서 설치 Github에서 source를 다운로드 받아서 build한 후 설치 CRAN에서 배포하는 버전을 포함한 모든 RHive의 패키지와 소스는 RHive의 공식 개발 사이트에서 찾을 수 있다. RHive의 Github repository는 경로: https://github.com/nexr/RHive 튜토리얼의 내용 이 튜토리얼에서는 Hadoop과 Hive가 설치되어 있고 이미 작동하고 있는 환경에 R과 RHive를 추가로 설치하여 작동할 수 있게 만드는 것을 설명할 것이다. 튜토리얼에서 사용한 환경 이 튜토리얼에서는 RHive을 CentOs5 Linux 64bit 버전에 설치하는 것을 기준으로 작업하였다. 하지만 다른 Linux 배포판이나 Mac OS X나 FreeBSD등에서 설치하는 방법은 크게 차이가 없을 것으로 예상하며, 단지 Linux 배포판별로 git 이나 ant 와 같은 패키지를 설치하는 방법이 배포판이 사용하는 패키징시스템이나 설치방법의 차이로 다를 수 있다. Windows에서 RHive를 설치해서 사용하는 방법은 이 튜토리얼에서는 소개하지 않으며 별도의 튜토리얼로 제공할 것이다. 추가로 Windows에서 RHive를 사용하려고 한다면 RStudio-server를 이용한 원격접속을 권장한다. Hadoop과 Hive 구성 환경 이 튜토리얼에서 사용한 서버들의 IP 주소와 그 서버들에 각각 설치되어 작동하고 있는 소프트웨어 및 콤포넌트 및 역할들은 다음과 같다.

R hive tutorial 1

Embed Size (px)

Citation preview

Page 1: R hive tutorial 1

RHive 튜토리얼 – 설치 및 설정

RHive 설치 방법들

RHive를 설치하기 위해 소스를 얻으려면 아래의 3가지 방법을 이용할 수 있다.

• R을 실행한 뒤 install.packages() 함수를 사용해서CRAN으로부터 설치 • RHive 프로젝트 홈페이지에서 빌드된 R 패키지를 다운로드 받은 후 R CMD명령어를 를 이용해서 설치

• Github에서 source를 다운로드 받아서 build한 후 설치

CRAN에서 배포하는 버전을 포함한 모든 RHive의 패키지와 소스는 RHive의 공식 개발 사이트에서 찾을 수 있다.

RHive의 Github repository는 경로: https://github.com/nexr/RHive

튜토리얼의 내용

이 튜토리얼에서는 Hadoop과 Hive가 설치되어 있고 이미 작동하고 있는 환경에 R과 RHive를 추가로 설치하여 작동할 수 있게 만드는 것을 설명할 것이다.

튜토리얼에서 사용한 환경

이 튜토리얼에서는 RHive을 CentOs5 Linux 64bit 버전에 설치하는 것을 기준으로 작업하였다. 하지만 다른 Linux 배포판이나 Mac OS X나 FreeBSD등에서 설치하는 방법은 크게 차이가 없을 것으로 예상하며, 단지 Linux 배포판별로 git이나 ant와 같은 패키지를 설치하는 방법이 배포판이 사용하는 패키징시스템이나 설치방법의 차이로 다를 수 있다. Windows에서 RHive를 설치해서 사용하는 방법은 이 튜토리얼에서는 소개하지 않으며 별도의 튜토리얼로 제공할 것이다. 추가로 Windows에서 RHive를 사용하려고 한다면 RStudio-server를 이용한 원격접속을 권장한다.

Hadoop과 Hive 구성 환경

이 튜토리얼에서 사용한 서버들의 IP 주소와 그 서버들에 각각 설치되어 작동하고 있는 소프트웨어 및 콤포넌트 및 역할들은 다음과 같다.

Page 2: R hive tutorial 1

10.1.1.1 - Hadoop namenode, Hive server, R, RHive 10.1.1.[2-4] - Hadoop job node, DFS node, Rserve node

즉, 이 튜토리얼에서는 다음과 같은 것이 R과 RHive설치전에 이미 구성되어 있다는 것을 전제한다. 단, IP주소는 사용자의 환경에 따라 다를 수 있다.

• 10.1.1.1주소를 가진 서버에 Hadoop namenode가 설치되어 있고 Hive가 설치되어 있으며 Hive server가 작동하고 있다고 가정한다.

• 10.1.1.2, 10.1.1.3, 10.1.1.4 주소를 가진 서버들에는 Hadoop DFS node와 Hadoop Job node가 설정되어 있으며 작동하고 있다고 가정한다.

• 위의 구성이 잘 작동하므로 Hadoop과 Hive가 정상 작동하고 있다고 가정한다.

만약 Hadoop과 Hive의 설치 과정부터 필요하다면 설치를 위해서 Hadoop과 Hive의 공식 사이트를 비롯한 다른 reference를 참조하여 설치하기 바란다.

참조할 사항

원칙적으로 Hadoop namenode에는 namenode 기능 외의 다른 것들을 설치하거나 실행하지 않는 것이 좋으며 그렇게 설정하는 것이 권장되지만 학습또는 빠른 작업을 위해 소규모의 클러스터를 셋업하기 위한 목적으로 이 튜토리얼에서는 편의상 Hadoop namenode에 Hive server와 R, RHive를 모두 설치하였다. 더 큰 규모와 여러 사용자가 동시에 사용해야 하는 안정된 환경을 구성하려고 한다면 이 튜토리얼의 내용을 참조해서 충분히 알맞게 설정을 변경할 수 있을것으로 예상한다.

Git을 이용해서 소스를 다운로드 받아 설치하는 방법

RHive는 Github으로 소스코드 관리를 하고 있다. Github에서 source code를 다운로드 해서 설치하는 것은 많이 번거롭지 않으며 가장 최근에 변경된 소스를 기반으로 패키지를 그대로 빌드해서 사용할 수 있다는 장점이 있다. 현재 자신이 사용하고 있는 RHive 패키지에 어떤 문제가 발견되었고 최신 소스코드에 수정된 내용이 업데이트 되었다는 것을 확인했고 바로 적용해서 사용하려고 한다면 Github에서 source code를 직접 받아서 스스로 RHive를 빌드해서 사용하는 것이 가장 빠른 방법이다.

RHive의 소스코드를 받을 수 있는 Github repository 경로는 아래와 같다. git://github.com/nexr/RHive.git

Git을 사용하는데 익숙한 사용자라면 Github repository의 경로를 아는 것 만으로도 RHive 패키지를 빌드할 수 있을 것이다.

하지만 여러분이 Github을 사용하는데 익숙하지 않다면 이 튜토리얼을 보고 간단하게 빌드하는 방법을 배울 것이다. 여러분이 사용하는 OS가 Linux나 Mac OS X같은 것들이라면 terminal을 열고 서버에서 작업할 것이라면 작업할 원격 서버로 SSH등을 이용해서 접속한다.

Page 3: R hive tutorial 1

이 튜토리얼에서는 다소 위험하지만 작업 계정 root계정을 바로 사용할 것인데 만약 사용자의 환경이 root계정으로 접속하지 못하는 환경이거나 root의 패쓰워드를 알아 낼 수 없다면 sudo를 설치한 후 root권한을 가진 관리자에게 요청하여sudoer 권환을 획득해서 sudo 명령어와 함께 작업할 필요가 있다. 이 튜토리얼에서는 root계정을 그대로 사용할 것이므로 sudo 명령어를 사용하지 않을 것이므로 sudo 명령을 이용하는 사용자는 Linux 명령의 앞에 sudo를 입력해야 하는 것을 잊지 않아야 한다.

터미널 열기 또는 접속하기

SSH터미널 장을 열거나 터미널을 열고 ssh 명령어를 이용해 작업할 서버에 접속한다

ssh  [email protected]  

여기서 10.1.1.1은 RHive가 설치될 서버이며 Hadoop의 namenode이기도 하다.

소스 다운로드

Github에서 RHive소스코드를 다운로드하기 위해서 임시 디렉토리를 만들고 RHive의 소스를 git명령으로 다운로드 받는다.

그리고 자동으로 생성된 하위 디렉토리인 RHive로 이동한다.

만약 git명령이 동작하지 않아서clone 을 하지 못한다면 아래의 명령으로 git을 설치하고 위의 과정을 다시 진행해야 한다. (CentOs5 기준)

yum  install  git  

git을 설치할 수 없다면 http://github.com 방문하여 git client를 설치하고 앞서 설명한 clone을 수행하도록 한다.

ant를 이용해서 jar를 빌드하기

RHive를 R에서 사용가능한 R package로 만들기 전에 선행작업으로 확장자가 jar인 몇개의 java로 작성된 내부 모듈이 먼저 빌드되어야 한다. R의 패키징 시스템은 Java의

mkdir  RHive_source  

cd  RHive_source  

git  clone  git://github.com/nexr/RHive.git  

#  if  you  succeed,  the  name  "RHive'  is  made  automatically  

cd  RHive  

Page 4: R hive tutorial 1

소스를 컴파일해서 jar파일로 묶어 주는 작업을 해주지 않기 때문이다. CRAN에서 다운로드 받거나 R에서 바로 설치가 가능한 패키지의 최종본을 다운로드 받는 경우에는 jar파일들이 이미 포함되어 있어 이 과정이 필요없지만 소스를 받아서 직접 빌드하는 경우에는 이 과정을 직접 해야 한다.

다음과 같이 하여 ant로 RHive 패키지에 포함될 jar를 컴파일한다.

ant  build  

만약 ant가 없다면 역시 ant를 먼저 Linux에 설치한 후 위의 과정을 진행해야 한다. 또한 당연한 것이지만 java도 설치가 되어 있어야 한다. ant는 아래의 명령어로 설치할 수 있다.

yum  install  ant  

명령이 실행되고 나면 다음과 유사한 결과를 볼 수 있다.

Page 5: R hive tutorial 1

실행 후 "BUILD SUCCESSFUL" 메세지를 본다면 빌드가 성공한 것을 알 수 있으며 만약 에러 메세지와 함께 빌드에 실패한 것을 확인했다면 RHive 개발팀에 바로 문의하는 것이 해결할 수 있는 가장 빠른 방법이다. 빌드의 실패한 이유는 소스 코드에 오류가 있거나 환경적인 문제가 대부분일 것이다.

RHive 패키지 빌드하기

앞서 과정을 통해서 ant로 jar를 빌드하고 난 후에 RHive를 R package의 배포본이 되도록 만들어야 한다. 즉, 이것은 CRAN에서 제공하는 패키지를 만드는 작업과 완전하게 동일하지는 않지만 거의 같은 작업이며 이 작업을 한 후에 R에 RHive를 설치할 수 있다. 현재 경로가 jar를 빌드했던 디렉토리와 동일한지 확인하고 아래와 같이 RHive 패키지를 빌드한다.

#  antBuildfile:  build.xml  

compile:         [mkdir]   Created   dir:  /mnt/srv/RHive_package/RHive/build/classes         [javac]   Compiling   5  source   files   to  /mnt/srv/RHive_package/RHive/build/classes         [unjar]   Expanding:  /mnt/srv/RHive_package/RHive/RHive/inst/javasrc/lib/REngine.jar  into   /mnt/srv/RHive_package/RHive/build/classes         [unjar]  Expanding:  /mnt/srv/RHive_package/RHive/RHive/inst/javasrc/lib/RserveEngine.jar  into  /mnt/srv/RHive_package/RHive/build/classes  

jar:             [jar]   Building   jar:  /mnt/srv/RHive_package/RHive/rhive_udf.jar  

cran:          [copy]   Copying   1   file   to  /mnt/srv/RHive_package/RHive/RHive/inst/java          [copy]  Copying  13  files   to  /mnt/srv/RHive_package/RHive/build/CRAN/rhive/inst          [copy]  Copying   9   files   to  /mnt/srv/RHive_package/RHive/build/CRAN/rhive/man          [copy]  Copying   3   files   to  /mnt/srv/RHive_package/RHive/build/CRAN/rhive/R          [copy]  Copying  1  file  to  /mnt/srv/RHive_package/RHive/build/CRAN/rhive          [copy]  Copying   1   file   to  /mnt/srv/RHive_package/RHive/build/CRAN/rhive      [delete]   Deleting:  /mnt/srv/RHive_package/RHive/rhive_udf.jar  

main:  

BUILD  SUCCESSFUL  

Page 6: R hive tutorial 1

"R CMD build"의 대소문자를 주의해야 하며 디렉토리내의 파일을 build하기 전에 확인하는 이유는 "R CMD build"에 인자로 주어지는 경로내에 DESCRIPTION이라는 R패키지를 생성하는데 필요한 필수 정의파일이 존재하는 경로여야 하기 때문이다.

아래와 같은 명령으로 간단하게 만들 수 있다.

#  pwd  

/root/RHive_package/RHive  

#  ls  -­‐l  

total  76  

-­‐rw-­‐r-­‐-­‐r-­‐-­‐  1  root  root    1413  Dec  11  16:41  ChangeLog  

-­‐rw-­‐r-­‐-­‐r-­‐-­‐  1  root  root    2068  Dec  11  16:41  INSTALL  

-­‐rw-­‐r-­‐-­‐r-­‐-­‐  1  root  root    2444  Dec  11  16:41  README  

drwxr-­‐xr-­‐x  5  root  root    4096  Dec  11  16:41  RHive  

drwxr-­‐xr-­‐x  4  root  root    4096  Dec  11  16:42  build  

-­‐rw-­‐r-­‐-­‐r-­‐-­‐  1  root  root    2999  Dec  11  16:41  build.xml  

-­‐rw-­‐r-­‐-­‐r-­‐-­‐  1  root  root  35244  Dec  11  16:41  rhive-­‐logo.jpg  

-­‐rw-­‐r-­‐-­‐r-­‐-­‐  1  root  root  12732  Dec  11  16:41  rhive-­‐logo.png  

#  R  CMD  build  ./RHive  

빌드가 정상적으로 진행되었다면 아래와 유사한 결과 메세지를 볼 수 있다.

*  checking  for  file  './RHive/DESCRIPTION'  ...  OK  

*  preparing  'RHive':  

*  checking  DESCRIPTION  meta-­‐information  ...  OK  

*  checking  for  LF  line-­‐endings  in  source  and  make  files  

*  checking  for  empty  or  unneeded  directories  

*  building  'RHive_0.0-­‐4.tar.gz'  

RHive_0.0-4.tar.gz 라는 타르볼 파일이 생성되었음을 확인할 수 있으며, 이 패키지는 R에서 명령어나 함수를 이용해서 바로 설치할 수 있는 패키지의 최종 형태이다. 생성된 파일의 이름은 빌드한 RHive 패키지의 버전에 따라 숫자부분이 다를 것이며 이 튜토리얼의 시점에서의 RHive버전은 0.0-4이다.

RHive 패키지 설치

Page 7: R hive tutorial 1

이제 생성한 RHive패키지 또는 만약 최종 형태의 RHive패키지를 직접 다운로드 받았다면 그 RHive패키지를 R에서 사용할 수 있도록 설치 한다. 아래와 같은 명령으로 설치할 수 있다.

R  CMD  INSTALL  ./RHive_0.0-­‐4.tar.gz  

특별한 에러 메세지가 없다면 설치가 완료된 것이다.

그러나 실패하는 많은 경우 아래와 같은 rJava와 Rserve 패키지들에 관련된 에러 메세지를 볼 수도 있다.

*   installing   to   library   '/usr/lib64/R/library'ERROR:  dependencies   'rJava',   'Rserve'   are   not   available   for   package  'RHive'*  removing  '/usr/lib64/R/library/RHive'  

이 에러메세지는 rJava와 Rserve라는 R 패키지가 현재 여러분이 사용하는 R에 설치되어 있지 않았음을 나타낸다.

RHive은 rJava와 Rserve 패키지에 의존성을 가지고 있기 때문에 이 패키지가 RHive를 설치하기 전에 이미 R에 설치되어 있어야 한다.

CRAN을 이용해서 RHive를 설치하는 경우에는 의존성이 있는 패키지들을 자동으로 찾아서 설치해 주지만 소스를 이용한 경우에는 자동으로 설치가 되지 않는다. 의존성이 있는 패키지를 수동으로 먼저 설치한 후 RHive 패키지 설치를 재시도한다.

#  R을  연다  

install.packages("rJava")  

install.packages("Rserve")  

#  그리고  RHive를  설치한다  

install.packages("./RHive_0.0-­‐4.tar.gz",  repos=NULL)  

에러 메세지가 출력되지 않는다면 설치가 완료된 것이다.

RHive package를 프로젝트 사이트에서 직접 받기

빌드된 패키지를 다운로드 받을 수 있는 URL은 아래와 같다. https://github.com/nexr/RHive/downloads

위 페이지에서는 버전별로 바로 설치가 가능한 완성된 형태의 패키지를 제공한다. 이 튜토리얼에서는 아래에 표시된 버전을 받아서 설치할 것 이다. 여러분은 튜토리얼을 읽는 시점에서 가장 최신 버전을 다운로드 받을 것을 권장한다.

Page 8: R hive tutorial 1

RHive_0.0-­‐4-­‐2011121201.tar.gz   —   RHive_0.0-­‐4   SNAPSHOP  (build2011121201)  -­‐  R  package  

여러분은 이 페이지에서 웹브라우저를 이용해서 파일을 다운로드 받아서 랩탑 또는 데스크탑에 설치하거나 원격서버에 FTP로 파일을 전송해서 설치할 수도 있다. 이 튜토리얼에서는 원격에 있는 리눅스서버에 설치하는 것을 예로 보여줄 것이다.

우선 터미널로 원격에 있는 RHive를 설치할 리눅스에 접속한다. 이 튜토리얼에서는 10.1.1.1 이라는 사설 네트워크 즉, 내부 네트워크에 안쪽에 위치하는 서버이다.

ssh  [email protected]  

mkdir  RHive_installable  

cd  RHive_installable  

이제 임시 디렉토리를 생성하고 wget을 이용해 파일을 다운로드 받는다. 다운로드 링크의 경로는 위에서 언급한 다운로드 사이트에서 링크 주소를 알아낼 수 있다. wget 의 옵션에 --no-check-certificate를 적어 주는 것을 기억하자.

wget   -­‐-­‐no-­‐check-­‐certificate  https://github.com/downloads/nexr/RHive/RHive_0.0-­‐4-­‐2011121401.tar.gz  

다운로드가 완료되었다면 여러분은 아래와 같은 파일을 현재 디렉토리에서 찾을 수 있을 것이다.

#  ls  -­‐al  

total  3240  

drwxr-­‐xr-­‐x  2  root  root        4096  Dec  11  18:00  .  

drwxr-­‐x-­‐-­‐-­‐  6  root  root        4096  Dec  11  18:02  ..  

-­‐rw-­‐r-­‐-­‐r-­‐-­‐   1   root   root   3302766   Dec   12     2011   RHive_0.0-­‐4-­‐2011121401.tar.gz  

이 파일은 CRAN에 올리기 위해서 RHive 개발팀이 생성한 패키지이므로 별도의 빌드과정이 필요하지 않다. R을 이용해서 바로 설치가 가능하다.

R  CMD  INSTALL  ./RHive_0.0-­‐4-­‐2011121201.tar.gz  

Page 9: R hive tutorial 1

만약 앞서에서 봤던 것처럼 rJava와 Rserve와 관련된 의존성과 관련된 에러 메세지를 본다면 아래와 같이 R내부에서 그것들을 먼저 설치하고 다운로드 받은 것을 다시 설치한다. 앞서에서도 언급했지만 아래와 같은 방법으로 설치할 수 있다.

Open  R  

install.packages('rJava')  

install.packages('Rserve')  

에러 메세지가 없다면 설치가 완료된 것이다.

Git client를 사용하지 않고 source code 다운로드 하기

Git명령어나 클라이언트를 이용하지 않고도 Github에서 소스코드를 다운로드 받을 수 있다. Github에서는 압축된 소스코드를 웹브라우저를 이용해서 다운로드 받을 수 있도록 지원한다. 아래와 같이 최신의 소스를 다운로드 할 수 있다.

wget   -­‐-­‐no-­‐check-­‐certificate  https://github.com/nexr/RHive/zipball/master  -­‐O  RHive.zip  

unzip  RHive.zip  

cd  nexr-­‐RHive-­‐df7341c/  

소스를 컴파일하고 패키지를 빌드 하는 방법은 Git client를 이용해서 RHive 소스를 받은 경우와 동일하다.

R과 Rserve 설치하기

RHive를 사용하기 위해서는 Hadoop의 모든 job node에 Rserve가 설치되어 있어야 한다. Rserve는 R core 팀에서 제공하는 패키지이며 R을 서버의 형태로 작동시키는 패키지로 기본으로 제공되지 않으며 별도로 설치해야 한다. RHive는 Hadoop의 conf에 있는 slaves를 참조해 각 job node에 실행된 Rserve의 위치를 확인한 후 접속하여 제어한다. Rserve를 설치하는 것은 어렵지 않으며 다음 과정을 따라 Rserve를 설치한다.

이제부터 Hadoop name node와 job node에 모두 접속해서 각각 R과 Rserve를 설치한다. 단, name node에는 Rserve를 반드시 설치할 필요는 없다.

Page 10: R hive tutorial 1

ssh  [email protected]  

만약 R이 설치되어 있지 않다면 R을 먼저 설치한다. CentOs5에서는 다음과 같은 방법으로 쉽게 R 최신 버전을 설치할 수 있다. R과 함께 R-devel를 함께 설치해서 Rserve가 설치될 때 필요한 header 파일들을 한꺼번에 설치해 주는 것을 기억하자.

rpm   -­‐Uvh   http://download.fedora.redhat.com/pub/epel/5/i386/epel-­‐release-­‐5-­‐4.noarch.rpm  

   

yum  install  R  

yum  install  R-­‐devel  

필요한 패키지가 설치되었으면 다음과 같은 명령으로 Rserve를 설치한다.

open  R  

install.packages("Rserve")  

만약 설치된 R이 libR.so라는 파일을 함께 가지고 있지 않은 경우에 Rserve를 설치할 때 다음과 같은 에러가 발생한다.

*  installing  *source*  package  'Rserve'  ...  

**  package  'Rserve'  successfully  unpacked  and  MD5  sums  checked  

checking  whether  to  compile  the  server...  yes  

configure:  error:  R  was  configured  without  -­‐-­‐enable-­‐R-­‐shlib  or  -­‐-­‐enable-­‐R-­‐static-­‐lib  

   

***   Rserve   requires   R   (shared   or   static)  library.                                              ***  

***  Please  install  R  library  or  compile  R  with  either  -­‐-­‐enable-­‐R-­‐shlib    ***  

***   or   -­‐-­‐enable-­‐R-­‐static-­‐lib  support                                                                        ***  

   

 Alternatively   use   -­‐-­‐without-­‐server   if   you   wish   to   build   only  Rserve  client.  

   

Page 11: R hive tutorial 1

   

ERROR:  configuration  failed  for  package  'Rserve'  

*  removing  '/usr/lib64/R/library/Rserve'  

이를 해결하기 위해서는 R이 컴파일 될 때 --neable-R-shlib 또는 --enable-R-static-lib로 컴파일 된 것이어야 하는데 대부분의 Linux에 제공되는 R패키지들은 이미 이 옵션들로 컴파일이 된 것이며 그렇기 때문에 사용자가 이 에러를 본다면 R을 소스를 다운로드하여 컴파일하면서 옵션을 포함하지 않았거나 다른 환경적인 문제일 가능성이 크다. 소스를 컴파일할 때 옵션을 빠뜨린 것이 아니고 Linux에서 제공하는 rpm이나 yum, aptitude와 같은 패키징 시스템으로 설치하였음에도 불구하고 위와 같은 에러를 본다면 먼저 아래와 같은 명령으로 R이 library 파일이 있는 경로를 출력하는지 확인한다.

#  R  CMD  config  -­‐-­‐ldflags  

-­‐L/usr/lib64/R/lib  -­‐lR  

만약 위의 명령을 실행하던 중 아래와 같은 에러를 볼 수도 있다.

[root@i-­‐10-­‐24-­‐1-­‐34  Rserve]#  R  CMD  config  -­‐-­‐ldflags  

/usr/lib64/R/bin/config:  line  142:  make:  command  not  found  

/usr/lib64/R/bin/config:  line  143:  make:  command  not  found  

이것은 make 유틸리티가 없다는 것을 의미하며 Rserve를 설치하는 과정중에 컴파일 과정이 있는데 make 유틸리티가 없어 컴파일을 하지 못한 것이므로 make 를 설치해 주어야 한다. 아래와 같이 make를 설치한 후 "R CMD config --ldflags"를 실행해서 compile에 필요한 library path가 정상적으로 출력되는지 다시 확인해 본다.

yum  install  make  

그리고 libR.so가 출력된 경로에 있는지 확인해 본다.

#  ls  -­‐al  /usr/lib64/R/lib  

total  4560  

drwxr-­‐xr-­‐x  2  root  root        4096  Dec  13  03:00  .  

drwxr-­‐xr-­‐x  7  root  root        4096  Dec  13  03:35  ..  

-­‐rwxr-­‐xr-­‐x  1  root  root  2996480  Nov    8  14:19  libR.so  

-­‐rwxr-­‐xr-­‐x  1  root  root    177176  Nov    8  14:19  libRblas.so  

-­‐rwxr-­‐xr-­‐x  1  root  root  1470264  Nov    8  14:19  libRlapack.so  

Page 12: R hive tutorial 1

libR.so가 존재하는 것을 확인할 수 있다. 이제 Rserve를 설치할 수 있는 준비가 다 되었으므로 Rserve를 설치를 재시도해서 완료한다.

open  R  

install.packages("Rserve")  

Rserve 실행하기

Rserv를 설치하는데 성공했다면 다음과 같이 Rserve를 대몬(DAEMON)으로 실행하여야 하는데 Rserve를 실행하기 전에 Rserve에 원격 접속을 허용할 수 있도록 설정파일을 고쳐야 한다.

다음과 같이 설정을 작업을 해준다.

#  Rserve를  실행할  서버에  모두 접속한다.  모든  Hadoop  job  node  

#  "/etc/Rserv.conf"  파일을  텍스트편집기로  오픈한다.  파일이  없다면  파일을  만들어야  한다.  

#  'remote  enable'라는  내용을  파일에  넣는다.  

#  저장하고  닫는다.  

Rserv.conf는 이 외에도 여러가지 옵션을 설정할 수 있다. configuration에 대한 자세한 내용은 아래 URL의 내용을 참조하기 바란다. http://www.rforge.net/Rserve/doc.html

이제 R을 종료하고 RHIVE_DATA 환경변수를 설정한다.

Rserve가 실행되는 서버들에는 RHIVE_DATA라는 환경변수가 설정되어야 하는데 RHIVE_DATA에는 RHive가 분산환경에서 작동할 때 임시로 사용할 디렉토리를 지정해야 한다. RHIVE_DATA는 RHive UDF/UDAF나 Map/Reduce 관련 함수를 사용하지 않을 것이라면 설정하지 않아도 되지만 RHive의 모든 기능을 사용하기 위해서는 Rserve를 설치할 때 미리 설정해 두는 것을 권장한다.

RHIVE_DATA 환경변수에 사용할 디렉토리는 미리 생성하고 환경변수를 설정한다.

mkdir  /service/rhive_data  

   

export  RHIVE_DATA="/service/rhive_data"  

그리고 텍스트 편집기를 이용해 /etc/profile이나 ~/.bash_profile, ~/.bashrc 파일에 넣어 두는것도 필요할 수 있다.

Page 13: R hive tutorial 1

vi  /etc/profile  

   

export  RHIVE_DATA='/service/rhive_data'  

이제 명령프롬프트에서 Rserve를 실행한다.

R  CMD  Rserve  

Rserve가 대먼(DAEMON)으로 실행되었는지 확인하려면 아래와 같은 방법으로 port를 listening하고 있는지 확인해 볼 수 있다.

#  netstat  -­‐nltp  

Active  Internet  connections  (only  servers)  

Proto   Recv-­‐Q   Send-­‐Q   Local   Address                               Foreign  Address                          State              PID/Program  name  

tcp                 0             0  0.0.0.0:6311                                0.0.0.0:*                                      LISTEN            25516/Rserve  

tcp                0            0  :::59873                                        :::*                                                LISTEN            13023/java  

tcp                0            0  :::50020                                        :::*                                                LISTEN            13023/java  

tcp                0            0  ::ffff:127.0.0.1:46056            :::*                                                LISTEN            13112/java  

tcp                0            0  :::50060                                        :::*                                                LISTEN            13112/java  

tcp                0            0  :::22                                              :::*                                                LISTEN            1109/sshd  

tcp                0            0  :::50010                                        :::*                                                LISTEN            13023/java  

tcp                0            0  :::50075                                        :::*                                                LISTEN            13023/java  

6311 port를 주시(listening)하고 있는 Rserve 대먼을 확인할 수 있다. 6311 port는 Rserve가 사용하는 default port이며 설정파일을 수정하여 변경할 수도 있다. 하지만 바꾸는 경우 혼동할 수 있으므로 특별한 이유가 없다면 바꾸지 않도록 한다. 또한 방화벽등의 보안 소프트웨어나 하드웨어등으로6311 port에 접근할 수 없도록 되어 있다면 적어도 Hadoop을 작동시키는 node들 즉, 내부 서버들 간에는 모두 6311port로 접속이 가능하도록 해야 한다.

Page 14: R hive tutorial 1

이를 확인해 보기 위해서 RHive가 실행될 서버에서 접속이 되는지 먼저 확인해 볼 필요가 있다. 다음과 같이 RHive가 설치될 서버에 접속해서 그 서버에서 다른 서버들의 Rserve로 접속이 가능한지 telnet으로 확인해 본다

#  connect  to  the  RHive  server  

ssh  [email protected]  

#  telnet  10.1.1.2  6311  

Trying  10.1.1.2...  

Connected  to  10.1.1.2.  

Escape  character  is  '^]'.  

Rsrv0103QAP1  

   

-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  

#  telnet  10.1.1.3  6311  

Trying  10.1.1.3...  

Connected  to  10.1.1.3.  

Escape  character  is  '^]'.  

Rsrv0103QAP1  

   

-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  

#  telnet  10.1.1.4  6311  

Trying  10.1.1.4...  

Connected  to  10.1.1.4.  

Escape  character  is  '^]'.  

Rsrv0103QAP1  

   

-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  

RHive실행을 위한 위한 환경변수 설정

RHive가 실행되기 위해서는 Hadoop과 Hive가 RHive가 설치된 서버, 랩탑 또는 데스크탑에 설치가 되어 있어야 하며 데스크탑에 있는Hadoop의 configuration도 설치된 Hadoop의 configuration과 일치해야 한다.

Page 15: R hive tutorial 1

만약 RHive를 설치하는 서버 또는 랩탑에 Hadoop과 Hive가 설치되어 있지 않아면 구성되어 있는 것과 동일한 버전을 설치하고 Hadoop의 configuration을 복사해서 동일하게 맞추어 준다. 맞춘 후에 는 environment variable을 설정해야 한다.

export  HADOOP_HOME=/service/hadoop-­‐0.20.203.0  

export  HIVE_HOME=/service/hive-­‐0.7.1  

위의 내용에서 /service/hadoop-0.20.203.0는 Hadoop이 설치된 경로이며 /service/hive-0.7.1는 Hive가 설치된 경로이다. 이 내용을 /etc/profile등에 넣어 두는 것을 권장한다.

만약 RHive을 Hadoop namenode와 동일한 서버에 설치하고 namenode에 접속해서 R을 실행하고 RHive를 사용할 것이라면 이 설정이 필요하지 않다. 그러나 RHive가 설치될 서버가 Hadoop namenode와 같은 서버가 아니거나 자신의 랩탑 또는 데스크탑이라면 "/service/hadoop-0.20.203.0/conf"의 내용을 반드시 RHive를사용할 Hadoop 클러스터의 configuration과 동일하게 맞추어 주는 것을 해야 한다.

RHive 예제 실행하기

앞서 말했듯이 RHive를 작동시키기 위해서는 R을 실행하기 전에 환경변수를 설정해야 한다. 좀더 정확하게 말하자면 RHive 초기화(initialize)하기전에 RHive에서 필요로 하는 환경변수가 모두 설정되어 있어야 한다. 만약 R을 실행하기 전에 랩탑 또는 서버의 환경변수에 HIVE_HOME과 HADOOP_HOME을 세팅하는 것을 잊어버렸거나 또는 설정하는 방법에 익숙하지 않거나 여러가지 다른 버전을 바꿔 가면서 사용하기 위해서 일부러 그 과정을 생략했다면 아래와 같이 R을 실행한 후에도 지정해 줄 수 있다.

Open  R  

Sys.setenv(HIVE_HOME="/service/hive-­‐0.7.1")  

Sys.setenv(HADOOP_HOME="/service/hadoop-­‐0.20.203.0")  

library(RHive)  

앞서의 과정에 이미 /etc/profile등을 수정하여 RHive에서 필요로 하는 HIVE_HOME과 HADOOP_HOME 환경변수를 정의했고 R을 실행하기 전에 적용되었다면 R에서 위의 코드는 실행하지 않고 생략할 수 있다.

Page 16: R hive tutorial 1

하지만 그렇지 않다면 RHive를 사용하기 위해서 위 코드들 R을 실행할 때 매번 해 주어야 한다는 단점이 있다.

RHive 환경변수 확인하기 및 세팅하기

RHIVE_HOME과 HADOOP_HOME이 정확하게 설정되어 있지 않다면 RHive는 정상작동을 하지 않는다. 현재 위의 변수들에 지정된 경로(path)를 R에서 쉽게 확인하기 위해서 rhive.env()라는 펑션을 이용해서 현재 환경변수가 제대로 세팅되어 있는지 확인할 수 있다. 만약 Hive Home Directory나 Hadoop Home Directory가 제대로 출력되어 보이지 않는다면 세팅을 다시 확인해야 할 것이다.

>  rhive.env()  

Hive  Home  Directory  :  /mnt/srv/hive-­‐0.8.1  

Hadoop  Home  Directory  :  /mnt/srv/hadoop-­‐0.20.203.0  

Default  RServe  List  

node1  node2  node3  

Disconnected  HiveServer  and  HDFS  

RHive connect 실행

RHive를 loading한 후에는 작업을 하기 전에 rhive.connect()펑션을 호출해서 Hive server와의 connection을 만들어야 한다. connection을 만들지 않으면 RHive 함수들은 작동하지 않는다.

>  rhive.connect()  

SLF4J:  Class  path  contains  multiple  SLF4J  bindings.  

SLF4J:   Found   binding   in   [jar:file:/service/hive-­‐0.7.1/lib/slf4j-­‐log4j12-­‐1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]  

SLF4J:   Found   binding   in   [jar:file:/service/hadoop-­‐0.20.203.0/lib/slf4j-­‐log4j12-­‐1.4.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]  

SLF4J:   See   http://www.slf4j.org/codes.html#multiple_bindings   for  an  explanation.  

rhive.connect() 함수는 connection에 대한 return 값을 가지고 있지만 return 값을 처리하지 않는 경우 default로 내장된 변수 connection을 유지하며 따로 return값을 다룰 필요 없이 내장 변수를 이용해서 이미 연결된 connection을 계속 사용한다.

Page 17: R hive tutorial 1

여러개 Hive에 동시에 접속하는 경우가 아니라면 return값을 따로 다룰 필요가 없으며 그런 경우가 발생한다면 좀더 구체적인 사용법을 위해 RHive 도움말을 참조하는 것이 좋다.

HDFS에 있는 파일 확인하기

rhive.connect() 함수를 이용해서 최초의Hive connection을 만들 때 RHive가 몇 줄의 복잡한 메세지를 출력하는 것을 확인할 수 있다. 이것들은 무시해도 상관 없다. 이제 rhive.hdfs.* 함수들을 이용하여 Hadoop의 HDFS를 다룰 수 있으며 이것들은 "hadoop fs"가 지원하는 명령들과 대응된다. 만약 Hadoop에 익숙하지 않은 사용자라면 “hadoop fs” 명령들은 HDFS라는 분산파일시스템을 이용해 Linux 명령어와 유사한 인터페이스로 파일을 관리하는 명령어라는 것만을 이해해도 충분하다. HDFS상의 파일 목록을 확인하기 위해서는 rhive.hdfs.ls() 함수를 이용하여 확인할 수 있다.

>  rhive.hdfs.ls("/")  

   permission   owner             group       length             modify-­‐time                file  

1     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  14:27        /airline  

2     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07   13:16  /benchmarks  

3     rw-­‐r-­‐-­‐r-­‐-­‐     root   supergroup   11186419   2011-­‐12-­‐06  03:59      /messages  

4     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  22:05                /mnt  

5     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  22:15            /rhive  

6     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  20:19                /tmp  

Hive의 테이블 목록 확인하기

또 rhive.list.tables() 함수를 이용해서 Hive에 등록된 table의 목록을 확인할 수 있다. Hive에 익숙하지 않은 사용자라면 Hive는 일반적인 SQL 부류의 서버들과 유사하게 작동한다는 점을 이해하는 것으로 충분할 것이며 만약 SQL에 대해서 잘 모른다해도 크게 문제가 되지 않지만 Hive와 RHive 기능을 활용하기 위해 따로 학습을 할 것을 권장한다.

Page 18: R hive tutorial 1

Hive를 설치하고 아무런 테이블로 생성하지 않았다면 아래와 같은 결과를 볼 것이다.

>  rhive.list.tables()  

[1]  tab_name  

<0  rows>  (or  0-­‐length  row.names)  

Hive의 테이블 생성하기

간단한 RHive명령으로 R의 data frame을 Hive의 테이블로 저장할 수 있다.

tablename  <-­‐  rhive.write.table(USArrests)  

USArrests는 R을 설치하면 기본으로 제공되는 data set이며 RHive는 인수로 주어진 data.frame의 객체이름을 Hive table name으로 취급하여Hive에 하나의 table로 저장한다.

Table의 description 확인하기

그리고 rhive.list.desc() 함수를 이용해 Hive에 저장되어 있는 table의 description을 확인할 수 있다. 이것은 SQL의 “DESC tablename” 명령과 같은 것이다.

>  rhive.desc.table("USArrests")  

   col_name  data_type  comment  

1    rowname        string  

2      murder        double  

3    assault              int  

4  urbanpop              int  

5          rape        double  

참고로 Hive의 table name은 대소문자를 구문하지 않는다.

Hive의 테이블 생성하기2

MASS package에 있는 다른 data들이나 또는 CSV 파일등을 로딩한 데이터를 Hive로 저장하는 것이 가능하다.

library(MASS)  

tablename  <-­‐  rhive.write.table(Aids2)  

rhive.desc.table(tablename)  

Page 19: R hive tutorial 1

rhive.load.table(tablename)  

이 방법은 비교적 작은 크기의 데이터를 Hive에 업로드 하는데 유용한 것이며 만약 수GiB 이상의 데이터를 Hive에 저장하려고 한다면, 먼저 rhive.hdfs.* 함수들을 이용하여HDFS에 파일을 저장한 후 Hive에서 external table을 생성하여 사용하는 방법을 추천한다. RHive는 R문법으로 아직 용량이 큰 데이터를 자동으로 업로드하거나 저장하는 기능을 제공하지 않으며 기능추가를 고려중이다.

간단한 SQL문 실행하기

rhive.query() 함수를 이용하여 SQL을 Hive에 전달할 수 있다. 앞에서 생성한 usarrests라는 이름을 가진 Hive table의 전체 레코드수를 확인하는 간단한 SQL문을 실행해 보자.

rhive.query("SELECT  COUNT(*)  FROM  usarrests")  

   X_c0  

1      50  

위에서 실행한 SQL 구문은 Hive와 Hadoop을 이용해 Map/Reduce 과정을 수행한 것으로 SQL의 결과를 정상적으로 확인하였다면, RHive와 Hadoop 및 Hive 환경설정이 모두 제대로 되었음을 의미하며 Hadoop이 Map/Reduce를 통해서 입력한 데이터의 카운트를 계산해서 출력하였음을 의미한다.

주의할 점은 이 예제에서는 아주 작은 데이터를 사용하였기 때문에 분산처리플랫폼인 Hadoop과 Hive의 성능을 충분히 활용했다고 할 수는 없으며, usarrests와 같이 단일 서버 또는 랩탑에 장착된 메모리 한도내에 로딩될 수 있는 작은 크기의 데이터는 RHive를 이용하지 않고 R만을 이용해서 직접 처리할 수 있는 크기이다. 다시 말하면 이 과정은 단지 환경설정이 완료된 것과 RHive가 기본적인 작동을 정상으로 하는지 확인해 본 것이다.

Hadoop과 Hive를 통해 RHive의 기능을 충분히 활용하고자 한다면 최소한 수GiB에서 수십GiB의 데이터를 대상으로 사용하는 것이 바람직하다.

문의 또는 도움이 필요할 때

RHive에 대한 각 함수의 설명 및 자세한 내용은 각각의 튜토리얼 및 도움말을 참조하기 바란다. 버그를 발견했거나 도움말이 난해하고 RHive를 사용하는데 어려움이 있다면 github의 RHive 사이트에 버그리포팅을 하거나 아래의 e-mail주소로 RHive 개발팀에 문의할 수 있다. 문의와 요청, 버그리포트에 대해서 RHive개발팀은 항상 열려 있으며 기꺼히 협조할

Page 20: R hive tutorial 1

것이다. e-mail: [email protected]