MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
RHive tutorial 1: RHive 튜토리얼 1 - 설치 및 설정
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 주소와 그 서버들에 각각 설치되어 작동하고 있는
소프트웨어 및 콤포넌트 및 역할들은 다음과 같다.
2. 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등을
이용해서 접속한다.
3. 이 튜토리얼에서는 다소 위험하지만 작업 계정 root계정을 바로 사용할 것인데
만약 사용자의 환경이 root계정으로 접속하지 못하는 환경이거나 root의 패쓰워드를
알아 낼 수 없다면 sudo를 설치한 후 root권한을 가진 관리자에게 요청하여sudoer
권환을 획득해서 sudo 명령어와 함께 작업할 필요가 있다. 이 튜토리얼에서는
root계정을 그대로 사용할 것이므로 sudo 명령어를 사용하지 않을 것이므로 sudo
명령을 이용하는 사용자는 Linux 명령의 앞에 sudo를 입력해야 하는 것을 잊지 않아야
한다.
터미널 열기 또는 접속하기
SSH터미널 장을 열거나 터미널을 열고 ssh 명령어를 이용해 작업할 서버에 접속한다
ssh
root@10.1.1.1
여기서 10.1.1.1은 RHive가 설치될 서버이며 Hadoop의 namenode이기도 하다.
소스 다운로드
Github에서 RHive소스코드를 다운로드하기 위해서 임시 디렉토리를 만들고 RHive의
소스를 git명령으로 다운로드 받는다.
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
그리고 자동으로 생성된 하위 디렉토리인 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의
4. 소스를 컴파일해서 jar파일로 묶어 주는 작업을 해주지 않기 때문이다.
CRAN에서 다운로드 받거나 R에서 바로 설치가 가능한 패키지의 최종본을 다운로드
받는 경우에는 jar파일들이 이미 포함되어 있어 이 과정이 필요없지만 소스를 받아서
직접 빌드하는 경우에는 이 과정을 직접 해야 한다.
다음과 같이 하여 ant로 RHive 패키지에 포함될 jar를 컴파일한다.
ant
build
만약 ant가 없다면 역시 ant를 먼저 Linux에 설치한 후 위의 과정을 진행해야 한다.
또한 당연한 것이지만 java도 설치가 되어 있어야 한다.
ant는 아래의 명령어로 설치할 수 있다.
yum
install
ant
명령이 실행되고 나면 다음과 유사한 결과를 볼 수 있다.
5. 실행 후 "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.j
ar
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
6. "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 패키지 설치
7. 이제 생성한 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
위 페이지에서는 버전별로 바로 설치가 가능한 완성된 형태의 패키지를 제공한다.
이 튜토리얼에서는 아래에 표시된 버전을 받아서 설치할 것 이다. 여러분은 튜토리얼을
읽는 시점에서 가장 최신 버전을 다운로드 받을 것을 권장한다.
8. RHive_0.0-‐4-‐2011121201.tar.gz
—
RHive_0.0-‐4
SNAPSHOP
(build2011121201)
-‐
R
package
여러분은 이 페이지에서 웹브라우저를 이용해서 파일을 다운로드 받아서
랩탑 또는 데스크탑에 설치하거나 원격서버에 FTP로 파일을 전송해서 설치할 수도 있다.
이 튜토리얼에서는 원격에 있는 리눅스서버에 설치하는 것을 예로 보여줄 것이다.
우선 터미널로 원격에 있는 RHive를 설치할 리눅스에 접속한다.
이 튜토리얼에서는 10.1.1.1 이라는 사설 네트워크 즉, 내부 네트워크에 안쪽에
위치하는 서버이다.
ssh
root@10.1.1.1
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
9. 만약 앞서에서 봤던 것처럼 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를 반드시 설치할 필요는 없다.
10. ssh
root@10.1.1.1
만약 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.
11.
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
12. 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 파일에
넣어 두는것도 필요할 수 있다.
13. 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로 접속이 가능하도록 해야 한다.
14. 이를 확인해 보기 위해서 RHive가 실행될 서버에서 접속이 되는지 먼저 확인해 볼
필요가 있다.
다음과 같이 RHive가 설치될 서버에 접속해서 그 서버에서 다른 서버들의 Rserve로
접속이 가능한지 telnet으로 확인해 본다
#
connect
to
the
RHive
server
ssh
root@10.1.1.1
#
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과 일치해야 한다.
15. 만약 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에서 위의
코드는 실행하지 않고 생략할 수 있다.
16. 하지만 그렇지 않다면 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을 계속 사용한다.
17. 여러개 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 기능을 활용하기 위해 따로 학습을 할 것을
권장한다.
18. 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)
19. 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개발팀은 항상 열려 있으며 기꺼히 협조할