ExploratoryサーバーにODBCドライバーをインストールするには、デフォルトのR実行環境のDockerイメージを元に、ODBCドライバーの入ったDockerイメージを作成して使用します。このドキュメントではその手順を説明します。
以下のコマンドで、デフォルトのr-exploratory Dockerイメージをベースに、Dockerコンテナを起動します。 この例では、Exploratoryサーバーのバージョンは6.12.3.6を前提として説明しますが、サーバーのバージョンが違う場合は、コマンド内のバージョン番号を適宜置き換えてください。
docker run -it r-exploratory:6.12.3.6 /bin/bash
上のコマンドを実行すると、Dockerコンテナ内で実行されるシェルが表示されます。
シェル上から、ODBCドライバーをインスールします。ここでは、Amazon Redshift ODBC ドライバー バージョン2.0.0.1の例を紹介します。
以下のコマンドを実行して、ODBCドライバーをダウンロードしてインストールします。
curl -O https://s3.amazonaws.com/redshift-downloads/drivers/odbc/2.0.0.1/AmazonRedshiftODBC-64-bit-2.0.0.1.x86_64.rpm && alien -i AmazonRedshiftODBC-64-bit-2.0.0.1.x86_64.rpm
設定ファイルを編集するために、テキストエディタをインストールします。ここでは、Vimのインストール方法を紹介します。
apt-get -y --no-install-recommends install vim
以下のコマンドを実行して、ODBCの設定ファイルの場所を調べます。
odbcinst -j
出力例は以下のとおりです。/etc/odbcinst.ini
が設定ファイル、ということがわかります。
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
/etc/odbcinst.ini
を編集して、ODBCドライバーを追加します。ここでは、/opt/amazon/redshiftodbcx64
に追加されたRedshiftのドライバーを追加します。
先程インストールしたエディタを利用して、/etc/odbcinst.ini
を編集します。Vimを使って編集するには、以下のコマンドを実行します。
vim /etc/odbcinst.ini
ファイルの最後尾に移動して、以下のセクションを追加します。
[Amazon Redshift ODBC Driver (x64)]
Driver=/opt/amazon/redshiftodbcx64/librsodbc64.so
Setup=/opt/amazon/redshiftodbcx64/librsodbc64.so
最終的な /etc/odbcinst.ini
は以下のようになります。
ODBCの設定を行ったDockerのコンテナIDを取得します。今作業していたシェルは閉じずに、同じLinuxマシン上でもう一つ別のシェルを起動して、以下のコマンドを実行します。
docker ps
すると、以下のような表が出力されます。
CONTAINER ID IMAGE COMMAND PORTS
aad6f8d956a9 r-exploratory:6.12.3.6 "/bin/bash" 6311/tcp
表中でIMAGEがr-exploratory:6.12.3.6
、COMMANDが"/bin/bash"
となっている行が、先程のDockerコンテナを表す行です。この行のCONTAINER IDの値が、必要なコンテナIDです。この例では、aad6f8d956a9
がコンテナIDとなります。
こちらのコンテナIDを指定して、コンテナに加えた変更を保持したDockerイメージを作成します。この例では、この新しいDockerイメージのバージョンを6.12.3.6.1 としています。
docker commit -c 'CMD ["R", "-e", "Rserve::run.Rserve(remote=TRUE)"]' -c 'EXPOSE 6311' aad6f8d956a9 r-exploratory:6.12.3.6.1
作成したDockerイメージを元にDockerコンテナを起動して、変更がうまく追加されているか確認します。
docker run -it r-exploratory:6.12.3.6.1 /bin/bash
表示されるシェル内でRを起動します。
R
Rの中で、 odbc::odbcListDrivers()
というコマンドを実行して、RedshiftのODBCドライバーが追加されていることを確認します。
> odbc::odbcListDrivers()
name attribute
1 PostgreSQL ANSI Description
2 PostgreSQL ANSI Driver
3 PostgreSQL ANSI Setup
4 PostgreSQL ANSI Debug
5 PostgreSQL ANSI CommLog
6 PostgreSQL ANSI UsageCount
7 PostgreSQL Unicode Description
8 PostgreSQL Unicode Driver
9 PostgreSQL Unicode Setup
10 PostgreSQL Unicode Debug
11 PostgreSQL Unicode CommLog
12 PostgreSQL Unicode UsageCount
13 ODBC Driver 18 for SQL Server Description
14 ODBC Driver 18 for SQL Server Driver
15 ODBC Driver 18 for SQL Server UsageCount
16 SnowflakeDSIIDriver APILevel
17 SnowflakeDSIIDriver ConnectFunctions
18 SnowflakeDSIIDriver Description
19 SnowflakeDSIIDriver Driver
20 SnowflakeDSIIDriver DriverODBCVer
21 SnowflakeDSIIDriver SQLLevel
22 Amazon Redshift ODBC Driver (x64) Driver
23 Amazon Redshift ODBC Driver (x64) Setup
value
1 PostgreSQL ODBC driver (ANSI version)
2 psqlodbca.so
3 libodbcpsqlS.so
4 0
5 1
6 1
7 PostgreSQL ODBC driver (Unicode version)
8 psqlodbcw.so
9 libodbcpsqlS.so
10 0
11 1
12 1
13 Microsoft ODBC Driver 18 for SQL Server
14 /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1
15 1
16 1
17 YYY
18 Snowflake DSII
19 /usr/lib64/snowflake/odbc/lib/libSnowflake.so
20 03.52
21 1
22 /opt/amazon/redshiftodbcx64/librsodbc64.so
23 /opt/amazon/redshiftodbcx64/librsodbc64.so
docker-compose.ymlファイルをエディタで開いて、以下のようにr-exploratory Dockerイメージのバージョンを指定している行を見つけます。
...
rserve:
image: r-exploratory:6.12.3.6
...
こちらのバージョンを、作成したカスタムDockerコンテナのもので置き換えます。
...
rserve:
image: r-exploratory:6.12.3.6.1
...
これで、Exploratoryサーバーを再起動すれば、変更を入れたRの実行環境がExploratoryサーバー上で使用されるようになります。