Oracle PGXの環境をMac上で設定してみた(Docker使用)(2019年8月31日更新)

##Oracle PGXとは
Oracleが出しているインメモリのグラフ分析フレームワークです。ページランクや次数中心性等々のグラフを分析するアルゴリズムが多数組み込まれています。
動画のレコメンデーションや異常検出、タンパク質の相互作用の研究など、様々な分野への活用が期待されています。

[こちらの記事](https://qiita.com/aadoxsin/items/9c648d97eecdf3930c97)でわかりやすくまとめられているので、是非参照してみてください。

より深く知りたい方は、[OracleのHP](https://www.oracle.com/technetwork/oracle-labs/parallel-graph-analytix/overview/index.html)へどうぞ。

Windows上での環境構築は、[こちらの記事](https://qiita.com/kk31108424/items/529dd319ad642c1ecde7)をご覧ください。

##PCのスペック
・macOS Mojave
・2.3 GHz Intel Core i5
・メモリ 8 GB 2133 MHz LPDDR3

##いざ環境構築！
今回も[こちらの記事](https://github.com/ryotayamanaka/pgx-training/wiki/Setup-PGX)を参考にさせていただき、環境構築をしていきます。気合い入れていきましょう！

###Dockerfileの作成

```
$ vi Dockerfile
```

```:Dockerfile
FROM openjdk:8-jdk
RUN apt-get update && apt-get install -y \
    unzip \
    vim

# PGX
WORKDIR /opt
ARG PGX_VERSION=19.2.1
ARG PGX_FILE=pgx-$PGX_VERSION-server.zip
COPY $PGX_FILE /opt
RUN unzip $PGX_FILE \
 && rm $PGX_FILE
ENV PATH=$PATH:/opt/pgx-$PGX_VERSION/bin

# Groovy
WORKDIR /opt
ARG GROOVY_VERSION=2.5.6
ARG GROOVY_FILE=apache-groovy-binary-$GROOVY_VERSION.zip
RUN wget https://bintray.com/artifact/download/groovy/maven/$GROOVY_FILE \
 && unzip $GROOVY_FILE \
 && rm $GROOVY_FILE
ENV GROOVY_HOME=/opt/groovy-$GROOVY_VERSION

# For avoiding worning
ENV HADOOP_HOME=/opt/haoop

WORKDIR /work
```

####※注意すべきポイント：Dockerfileとpgx-server.zipファイルを同一ディレクトリに置く！
Dockerfileは必ずpgx-server.zipファイルと同一ディレクトリに置きましょう。Dockerfileとpgx-server.zipファイルを別のフォルダに入れていると、以下のように怒られてしまいます。
`/var/lib/docker/tmp/docker-builderXXXXXXX/... no such file or directory`

###イメージをビルドする(2019年8月31日 バージョン更新)

```
$ docker build ./ -t pgx:19.2.1
```
`-t` オプションで名前を付けることができます(余談ですが、tはtty(端末デバイス)のことを指しているようです)。
成功していたら、以下のように表示されます。

```
$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
pgx                 19.2.1              9e993a506a1c        About an hour ago   1.67GB
openjdk             8-jdk               3fb02922c98c        3 days ago          488MB
```
###作成したPGXのイメージをコンテナとして実行する

以下ように表示されれば成功です！

```
$ docker run -it --rm pgx:19.2.1 pgx
tput: unknown terminfo capability 'setafsd'
[WARNING] PGX shell is using Groovy installed in /opt/groovy-2.5.6. It is the responsibility of the user to use the latest version of Groovy and to protect against known Groovy vulnerabilities.
Jun 09, 2019 11:54:26 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
11:54:30,380 INFO Ctrl$1 - >>> PGX engine 19.1.0/ API 3.3.0 running.

PGX Shell 19.2.1
PGX server version: 19.2.1 type: SM running in embedded mode.
PGX server API version: 3.3.0
PGQL version: 1.2
type :help for available commands
variables instance, session and analyst ready to use
pgx>
```

###aliasを登録する
起動時にいちいち`docker run -it --rm pgx:19.2.1 pgx`と打つのは面倒くさいので、aliasを登録します。

####aliasとは

>エイリアスとは、偽名、別名、通称などの意味を持つ英単語。ITの分野では、ファイルなどの実体を別の名前で参照するためのシンボルといった意味で使われることが多い。
([IT用語辞典](http://e-words.jp/w/%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9.html)より引用)

今回は、`docker run -it --rm pgx:19.2.1 pgx`を`pgx`で済ますことができるように設定します。

####1  `.bashrc`ファイルを作成する
`.bashrc`は、シェル起動時に１回実行される隠しファイルです。`.bashrc`ファイルにaliasを登録しておけば、次回起動時にもaliasがそのまま使えるようになります。

```
$ vi .bashrc
```

```:.bashrc
alias pgx='docker run -it --rm -v $PWD:/work pgx:19.2.1 pgx'
```
#####要注意！！
`=`の左右にはスペースを入れてはいけません！

####2 `.bash_profile`が`.bashrc`ファイルを読み込む設定をする
作成した`.bashrc`ファイルの設定を反映させるために、`.bash_profile`に`.bashrc`ファイルを読み込んでもらえるようにします。

`.bash_profile`の末尾に`source ~/.bashrc`を書き加えます。

```
$ vi .bash_profile
```

```:.bash_profile
・・・（中略）・・・
source ~/.bashrc
```

####3 ターミナルを再起動する
上記の変更を反映させるために、ターミナルを再起動します。
これで、aliasの設定は完了です。

実際に動くか試してみます。

```
$ pgx
tput: unknown terminfo capability 'setafsd'
[WARNING] PGX shell is using Groovy installed in /opt/groovy-2.5.6. It is the responsibility of the user to use the latest version of Groovy and to protect against known Groovy vulnerabilities.
Jun 09, 2019 12:19:30 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
12:19:34,535 INFO Ctrl$1 - >>> PGX engine 19.1.0/ API 3.3.0 running.

PGX Shell 19.2.1
PGX server version: 19.2.1 type: SM running in embedded mode.
PGX server API version: 3.3.0
PGQL version: 1.2
type :help for available commands
variables instance, session and analyst ready to use
pgx> 
```
動きました！お疲れ様でした！