Oracle CloudでOracle R Enterpriseをセットアップ

#Oracle R Enterprise（ORE）とは
OREは、OSSのRではメモリがボトルネックになったり、シングルスレッドでしか動かないことから大規模分析がしづらい欠点を、Oracle Databaseに処理をオフロードさせることによって解消した商用Rとなっています。

クライアントサーバー構成を取り、今までのRと同じ開発環境（RStdio）でそのまま利用することができます。

![orearc.png](https://qiita-image-store.s3.amazonaws.com/0/108610/1df246f3-aae0-c415-8784-4842c307a65b.png)


また、Rでデータ分析の際によく使うdata.frameのサブクラスとしてore.frameを利用できることから、今までのRコマンドそのままでOracle Databaseの表に対して様々な操作を実行できます。既存Rユーザーにとっては、新しいコマンドを学習するためのハードルが少ないものとなっています。

データベースの中にデータがあるままRで分析を行えることから、データをR上に展開する手間がなくなり、分析サイクルを短縮することができます。ほかにもメモリネックでRが落ちてしまうような規模のデータであっても、Oracle Databaseの機能をフルに使い、問題なく分析を行うことができます。

Oracle Databaseのオプションとして提供されている機能のため、オンプレミスのOracle DatabaseでもOracle Database Cloud Service（DBCS）でも利用できます。既存の買い取り型のライセンスとしては、Oracle Advanced Analyticsというオプションライセンスのコンポーネントの一つとして利用できます。[^1]

[^1]: Oracle Advanced AnalyticsはOracle R EnterpriseとOracle Data Miningという二つのコンポーネントが含まれたオプションライセンスとなっています。

OREによって作成したモデルはデータベースに保存することもできますが、通常のRと同じように管理することもでき、Predictive Model Markup Language(PMML)に変換し、サードパーティー製のサービスにインポートすることも可能です。

![ore.png](https://qiita-image-store.s3.amazonaws.com/0/108610/84d2fc5e-2419-2c96-d51c-0a931f1aba7c.png)


既存Oracle DatabaseユーザーかつRユーザーの方にはとてもおすすめの機能ですし、Oracle Databaseユーザーでなくとも、Rユーザーかつ大規模な分析を行いたい方にもおすすめできます。

正直、desktop上のRで十分という方には、パフォーマンス上のメリットは感じていただけないかもしれませんが、データとRオブジェクトの管理にOracle Databaseを利用することができますので、パフォーマンス以外にも様々なメリットを享受できます。

この記事では、クイックに始める環境としてOREをDBCS上に構築するための手順を紹介します。

#ORE in DBCSクイックスタート
OREをインストールするためには、Rそのものと、Oracle Database、ORE用のパッケージを二つインストールする必要があります。

以下の5つのステップでインストールが完了します。

1. Oracle Databaseのインストール
2. Oracle R Distributionのインストール
3. OREユーザの選定(スキップ可能)
4. OREのインストールスクリプト(server.sh)の実行
5. 動作確認

##Step1 Oracle Databaseのインストール
DBCSでOracle Databaseを構築する手順は前回の記事[Oracle Database Cloud Service上で機械学習環境を構築してみた](http://qiita.com/ogamiki/items/130b40a8ea72fddc432d)で行った手順と同じため、省略させていただきます。ポイントはGUIに従って選択していく中で、Oracle Databaseのエディションを選択する箇所で、OREを使える**High Performance**または、**Extreme Performance**を選択することです。

##Step2 Oracle R Distributionのインストール
CRANからダウンロードできるRでもOREを動かすことはできますが、専用のパッチを適用するなどと手順がやや面倒なので、今回はOracleが無償で提供しているRのディストリビューションである、**Oracle R Distribution**を利用します。
実は、DBCSでは、Oracle Databaseを作成した段階でOracle R Distributionはインストール済みになっています。

作成した環境にoracleユーザでssh接続して、Rとコマンドラインで実行するとOracle R Distributionが起動することが確認できます。

```
[oracle@ore ~]$ R ★<<<Rと入力するだけで起動できます

Oracle Distribution of R version 3.1.1  (--) -- "Sock it to Me"
Copyright (C)  The R Foundation for Statistical Computing
Platform: x86_64-unknown-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

You are using Oracle's distribution of R. Please contact
Oracle Support for any problems you encounter with this
distribution.

>　★<<<R用のコマンドプロンプトが表示されます
```

2016年6月時点では、Oracle R Distiribution 3.1.1がインストールされています。

##Step3 OREユーザの選定(スキップ可能)
ORE用のパッケージをどのOracle Databaseユーザで使用できるようにするか決める必要があります。[前回の記事](http://qiita.com/ogamiki/items/130b40a8ea72fddc432d)の手順に従っていると、SQL Developerからmluserが作成されていますので、そちらを利用していただいてもかまいません。またORE用のユーザを新規で作成する場合には、次のstepで実行するインストールスクリプトの際に自動的に作成されます。今回の記事では、次のstepでユーザも作成する方法とします。

##Step4 OREのインストールスクリプト(server.sh)の実行
OREパッケージはDBCSのインスタンスでプリインストールされています。
Oracleユーザでssh接続した後に、/scrach/db/oreserverディレクトリに、

- ore-server-linux-x86-64-XXXXX.zip
- ore-supporting-linux-x86-64-XXXXX.zip

※2016年6月時点では、ore-server-linux-x86-64-1.4.1.zipとore-supporting-linux-x86-64-1.4.1.zip

の二つのファイルが配置されていることが確認できます。

```
[oracle@ore ~]$ cd /scratch/db/oreserver/
[oracle@ore oreserver]$ ls
ore-server-linux-x86-64-1.4.1.zip ore-supporting-linux-x86-64-1.4.1.zip
```


二つのファイルを展開すると、serverとsupporting二つのディレクトリとserver.shスクリプトが作成されます。

```
[oracle@ore oreserver]$ ls -lah
total 105M
drwxr-xr-x 4 oracle oinstall 4.0K Jun 28 18:05 .
drwxr-xr-x 6 oracle oinstall 4.0K May  3 17:57 ..
-rw-r--r-- 1 oracle oinstall 102M May  3 17:49 ore-server-linux-x86-64-1.4.1.zip
-rw-r--r-- 1 oracle oinstall 3.6M May  3 17:49 ore-supporting-linux-x86-64-1.4.1.zip
drwxr-xr-x 3 oracle oinstall 4.0K Jun 28 17:32 server
-r-xr-xr-x 1 oracle oinstall  54K Jun 25  2015 server.sh
drwxr-xr-x 2 oracle oinstall 4.0K Jun 28 17:32 supporting
[oracle@ore oreserver]$
```


展開後はserver.shを実行するだけで、OREのインストールが完了します。
server.shを実行するといくつかの項目を入力する必要がありますが、各ステップで何が入力候補なのか表示させることができます。
必要な入力内容としては、

1. インストール対象のPDB名
2. RQSYSスキーマ(OREリポジトリ用スキーマ)のユーザー表領域と一時表領域とパスワード
3. OREインストール対象のユーザー
4. (3で新規ユーザ作成の場合)OREインストール対象ユーザーのユーザー表領域と一時表領域とパスワード
5. 実行するかどうか

の5stepとなっています。
スクリプトの実行とともに新規にORE用ユーザーも作成することができます。

```
[oracle@ore oreserver]$ sh server.sh ★<<<server.shスクリプトの実行

Oracle R Enterprise 1.4.1 Server.

Copyright (c) 2012, 2014 Oracle and/or its affiliates. All rights reserved.

Checking platform .................. Pass
Checking R ......................... Pass
Checking R libraries ............... Pass
Checking ORACLE_HOME ............... Pass
Checking ORACLE_SID ................ Pass
Checking sqlplus ................... Pass
Checking ORACLE instance ........... Pass
Checking CDB/PDB ................... Fail
  ERROR: cannot install ORE in a root container
  PDB to use for ORE installation [list]: ★<<<候補リストを出すためにそのままenter
PDB1
  PDB to use for ORE installation [list]: PDB1 ★<<<候補リストにあるPDB1を入力
Checking CDB/PDB ................... Pass
Checking ORE ....................... Pass

Choosing RQSYS tablespaces
  PERMANENT tablespace to use for RQSYS [list]: ★<<<候補リストを出すためにそのままenter
SYSAUX
SYSTEM
USERS
  PERMANENT tablespace to use for RQSYS [list]: USERS ★<<<候補リストにあるUSERSを入力
  TEMPORARY tablespace to use for RQSYS [list]: ★<<<候補リストを出すためにそのままenter
TEMP
  TEMPORARY tablespace to use for RQSYS [list]: TEMP ★<<<候補リストにあるTEMPを入力
Choosing RQSYS password
  Password to use for RQSYS: ★<<<RQSYSユーザのパスワードを設定

Choosing ORE user
  ORE user to use [list]: ★<<<候補リストを出すためにそのままenter
APEX_050000
APEX_LISTENER
APEX_REST_PUBLIC_USER
AUDSYS
C##DBAAS_BACKUP
C##DBAAS_MONITOR
DVF
DVSYS
GSMADMIN_INTERNAL
GSMCATUSER
GSMUSER
OJVMSYS
ORDS_METADATA
ORDS_PUBLIC_USER
PDBADMIN
SCOTT
SYSBACKUP
SYSDG
SYSKM
  ORE user to use [list]: oreuser  ★<<<候補リストにないユーザ名としてoreuserを入力
Choosing OREUSER tablespaces
  PERMANENT tablespace to use for OREUSER [list]: ★<<<候補リストを出すためにそのままenter
SYSAUX
SYSTEM
USERS
  PERMANENT tablespace to use for OREUSER [list]: USERS ★<<<候補リストにあるUSERSを入力
  TEMPORARY tablespace to use for OREUSER [list]: ★<<<候補リストを出すためにそのままenter
TEMP
  TEMPORARY tablespace to use for OREUSER [list]: TEMP ★<<<候補リストにあるTEMPを入力
Choosing OREUSER password
  Password to use for OREUSER: ★<<<新規に作成するoreuserユーザのパスワードを設定

Current configuration
  R Version ........................ Oracle Distribution of R version 3.1.1  (--)
  R_HOME ........................... /usr/lib64/R
  R_LIBS_USER ...................... /u01/app/oracle/product/12.1.0/dbhome_1/R/library
  ORACLE_HOME ...................... /u01/app/oracle/product/12.1.0/dbhome_1
  ORACLE_SID ....................... ORCL
  PDB .............................. PDB1

  Existing R Version ............... None
  Existing R_HOME .................. None
  Existing ORE data ................ None
  Existing ORE code ................ None
  Existing ORE libraries ........... None

  RQSYS PERMANENT tablespace ....... USERS
  RQSYS TEMPORARY tablespace ....... TEMP

  ORE user type .................... New
  ORE user name .................... OREUSER
  ORE user PERMANENT tablespace .... USERS
  ORE user TEMPORARY tablespace .... TEMP
  Grant RQADMIN role ............... No

  Operation ........................ Install/Upgrade/Setup

Proceed? [yes] ★問題ななければそのままenter

Removing R libraries ............... Pass
Installing R libraries ............. Pass
Installing ORE libraries ........... Pass
Installing RQSYS data .............. Pass
Configuring ORE .................... Pass
Installing RQSYS code .............. Pass
Installing ORE packages ............ Pass
Creating ORE script ................ Pass
Installing migration scripts ....... Pass
Installing supporting packages ..... Pass
Creating ORE user .................. Pass
Granting ORE privileges ............ Pass

Done
```

##Step5 動作確認
OREのインストールが完了したので、無事にOREが使える状態になっているか確認します。
まずはコンソールからOREと入力し、Oracle R Distributionを起動します。

**library(ORE)**と入力することによって、OREを使用するためのライブラリが読み込まれます。
データベースへの接続には、**ore.connect(user="OREUSER", password = "XXXXXX", service_name = "YYYYYY")**で接続できます。また接続が張れているかを確認するには **ore.is.connected()**でTRUEが返されるのを確認します。

```r
[oracle@ore ~]$ ORE

Oracle Distribution of R version 3.1.1  (--) -- "Sock it to Me"
Copyright (C)  The R Foundation for Statistical Computing
Platform: x86_64-unknown-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

You are using Oracle's distribution of R. Please contact
Oracle Support for any problems you encounter with this
distribution.

> library(ORE)
Loading required package: OREbase

Attaching package: ‘OREbase’

The following objects are masked from ‘package:base’:

    cbind, data.frame, eval, interaction, order, paste, pmax, pmin,
    rbind, table

Loading required package: OREembed
Loading required package: OREstats
Loading required package: MASS
Loading required package: OREgraphics
Loading required package: OREeda
Loading required package: OREmodels
Loading required package: OREdm
Loading required package: lattice
Loading required package: OREpredict
Loading required package: ORExml
> ore.connect(user="OREUSER", password = "XXXXXX", service_name = "YYYYYY" )
Loading required package: ROracle
Loading required package: DBI
> ore.is.connected()
[1] TRUE
> CARS <- ore.push(cars)
> head(CARS)
  speed dist
1     4    2
2     4   10
3     7    4
4     7   22
5     8   16
6     9   10
```

#まとめ
DBCSであれば、Oracle DatabaseのインストールやOracle R Distributionのインストール、ORE用のパッケージの配置などがすでに完了しているため、慣れるとOREのセットアップだけであれば10分以内に完了することができます。

注意点として、2016年6月時点でのOREの最新バージョンは1.5であり、最新のOREを利用したい場合には、OracleのDownloadページからORE1.5用のファイルとORE1.5と対応するOracle R Distributionが3.2.0以降の為、Oracle R Distribution 3.2.xのインストールが必要になります。

最新のOREを使用したいときのOracle R Distribution再インストールにはyumが便利です。
opcユーザでssh接続した後に、Oracle Linux6の場合にはyumリポジトリの設定で[xxxx_addons]のenabledを1にします

```OracleLinux6
[opc@ore ~]$ sudo vi /etc/yum.repos.d/public-yum-ol6.repo
--------------
[public_ol6_addons]
name=Oracle Linux $releasever Add ons ($basearch)
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL6/addons/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=0　★<<<ここを0から1に変更
```
あとはyumで指定のバージョンをインストールするだけです。
```
[opc@ore ~]$ sudo yum install R-3.2.0
```

残りのOREに関しては、[Oracle R Enterprise Downloadsのページ] (http://www.oracle.com/technetwork/database/database-technologies/r/r-enterprise/downloads/index.html)から、ライセンスの承認ボタンを押し、Linux 64bitのserverとsupportをダウンロードし、scpでOracleユーザ配下のディレクトリに配置します。

その後、Step4と同じ手順でファイルの展開とserver.shを実行することによって、最新のOREをご利用いただけます。


![rversion.png](https://qiita-image-store.s3.amazonaws.com/0/108610/49e0f26a-b160-9a98-c967-94f37eb860ca.png)



#注釈