研修で初めてPentahoを触ってきたのでここにメモ。
Edition比較
PentahoはOSSベースで、Community Edition(CE)とEnterprise Edition(EE)が存在する。後者は無論のこと有償であり、サポートがつくのと、統合インストーラでソフトウェア・スイートをいちどきにインストールできる。また、チーム開発向けのバージョニング機能等がついていたりするらしい(研修でそう聞いたがCEで実現できるかどうか未確認)。が、いずれにせよバージョニングならgitなりなんなりで代替可能、というかその方が高機能であるため、Editionの機能差異はあまり問題にならない。コア機能に差異はないので、ここではCEを使用する。
なお、Pentahoの各コンポーネントはJavaで書かれているため、大抵のOS上で動作可能(例えばpentaho-serverはTomcat+SpringなWebアプリケーションとして実装されている)。
前提環境
- OS: Mac OSX1
- DIツール: Pentaho Data Integration Community Edition 8.1
- DIサーバ: Pentaho Server Community Edition 8.1
- Java: Java(TM) SE Runtime Environment (build 1.8.0_151-b12) HotSpot
主要なWebリソース
- Pentaho Community
- Pentaho Wiki
- Pentaho SourceForge
- Pentaho Support
- Pentaho Documentation
- BEST PRACTICES AND GUIDELINES FOR PENTAHO
- Pentaho Data Integration(PDI)の各種ガイドライン
インストールと起動
CEなので統合インストーラはない。とはいえCommunityサイトやWikiサイトからダウンロードリンクを辿るか、SourceForgeから直接zipファイルをダウンロードして適当なディレクトリに展開するだけ。今回はSourceForgeから"pdi-ce-8.1.0.0-365.zip"を直接ダウンロードし、ユーザのホームディレクトリ直下に"pentaho"ディレクトリを作成してこの中にzipを展開してできた"data-integration"を配置した。
mkdir ~/pentaho
cd ~/pentaho
unzip ~/Downloads/pdi-ce-8.1.0.0-365.zip
echo '~/pentaho/data-integration/spoon.sh' > /usr/local/bin/spoon
chmod 755 /usr/local/bin/spoon
spoon
起動はspoon.sh
を実行するだけ。Javaが適切にセットアップされていれば特に問題なく起動する。必要なライブラリのパスを実行時に動的に取得するので、当該スクリプトをシンボリックリンク等で/usr/local/bin
あたりに放り込んでも動かない。毎回フルパスやディレクトリ移動して実行するのは面倒なので、ラッパースクリプトを作っておいた。spoon
で起動する。
また、これ単体に軽量のWebコンテナ(Carte)が実装されているので、あえてpentaho-serverを使用しなくてもある程度のことはお試し実行できる。今回はデータ統合のお勉強なのでこのまま進めるが、データベース接続設定(オブジェクト)を各ファイルで共有できないという大問題が発生するので、あとでみていく。
ヒープ設定
しばらく使っているとわかるが、このspoon、結構頻繁に落ちる。おそらくヒープメモリ不足でOutOfMemoryになっていると思われる。spoon.sh
をのぞいてみる。
231 if [ -z "$PENTAHO_DI_JAVA_OPTIONS" ]; then
232 PENTAHO_DI_JAVA_OPTIONS="-Xms1024m -Xmx2048m -XX:MaxPermSize=256m"
233 fi
見ての通りで、環境変数PENTAHO_DI_JAVA_OPTIONS
を設定してやればよいらしい。製品が提供するスクリプトを変更するのに抵抗がある文化で育ってきているので(パッチ当てたら戻っちゃったとか煩わしい)、外部環境変数として定義して起動スクリプトに渡るように、ここではとりあえず.bash_profile
にて当該環境変数を設定し、起動時・最大ともヒープサイズ4GBにしておく。
もうひとつ、Java HotSpotでは1.8からメモリ構造が変わって、MaxPermSizeでサイズ指定していたヒープのパーマネント領域が廃止され、かわりにMetaspaceがNative領域に確保されるようになったはず。起動スクリプトの実行直後のコンソール出力を見るとちゃんとエラーというか無視する旨の警告メッセージが出力されていた。
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
あまりいじる必要はないかもしれないが、Metaspaceサイズを指定するなら-XX:MetaspaceSize
と-XX:MaxMetaspaceSize
オプションを使用する。
echo 'export PENTAHO_DI_JAVA_OPTIONS="-Xms4096m -Xmx4096m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m"' >>~/.bash_profile
. ~/.bash_profile
spoon
フルGCが頻発して動作が遅いなどあれば、適宜このあたりをいじる必要がある。
なお、spoonを起動するとプロパティファイルが~/.kettle/kettle.properties
に作成されるので、これを編集することでカスタマイズできる(今はスルー)。properties
なので使いなれたプロパティエディタで修正するもよし、spoonから編集するもよし。後者の場合、「編集」メニューの「kettle.properties〜」から。
DB接続設定
有名なDB接続はサポートされている(JDBC接続なのでドライバは別途用意要)。というわけで、ここではお勉強のために公式配布されているサンプルデータを使用しつつ、DB接続する手順を記載しておく。
サンプルDBのダウンロード
SourceForgeから、以下のように辿ってファイルを取得する。
10年ほどメンテナンスされていないようだがまあいいか。pentaho_sample_data-1.7.1.zip
はHypersonic(現HSQLDB)同梱(Java実装なので実体はjarファイル1つ)。他にもOracleやPostgreSQL用のSQLファイルが用意されている。pentaho_demo_mysql5-1.7.1.zip
はOSS時代のjboss(つまり現WildFly)同梱で、同様にMySQL用のSQLファイルがdata/SampleDataDump_MySql.sql
に格納されている。今回は特段の理由もなく後者のMySQL版を使ってみる。他のRDBMSを使用する場合でもspoon自体の操作に大差はない。
SQL修正
このSQLファイルはMySQL5.1でmysqldump
したもののようで、そのままではMySQL5.7で実行できなかったので、以下のように若干修正した。
CREATE DATABASE /*!32312 IF NOT EXISTS*/ sampledata /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_general_cs */;
-- grant all on sampledata.* to pentaho_user identified by 'password';
-- grant all on sampledata.* to pentaho_admin identified by 'password';
<中略>
REQUIREDDATE timestamp NOT NULL default '1970-01-02 00:00:01',
SHIPPEDDATE timestamp NOT NULL default '1970-01-02 00:00:01',
<中略>
REQUIREDDATE timestamp NOT NULL default '1970-01-02 00:00:01',
SHIPPEDDATE timestamp NOT NULL default '1970-01-02 00:00:01',
今回はサンプルデータが使えればよいので、hibernate
とquartz
スキーマに関するDDLは全て削除し(CREATE DATABASE sampledata
より上の行は全削除)、ユーザも既存のユーザを使用するのでgrant
をコメントアウト、さらにtimestamp型列のデフォルト値を5.7系で許容できる値に置き換えた(5.1系は'0000-00-00 00:00:00'なんて値を許容していたのか???)。以下、5.7系マニュアルの抜粋。
11.3.1 The DATE, DATETIME, and TIMESTAMP Types
The DATE, DATETIME, and TIMESTAMP types are related. This section describes their characteristics, how > they are similar, and how they differ. MySQL recognizes DATE, DATETIME, and TIMESTAMP values in several > formats, described in Section 9.1.3, “Date and Time Literals”. For the DATE and DATETIME range descriptions, “supported” means that although earlier values might work, there is no guarantee.
The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.
The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.
The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
あとはPrimary Keyのないテーブルに対してALTER TABLE DISABLE|ENABLE KEYS
とかやっているので警告が出るのも無視。このSQLを実行すればsampledata
スキーマができあがり、サンプルデータがロードされる。
ER図
MySQL Workbenchでリバースエンジニアリングしたもの。外部キーがDDLにちゃんと書かれていないので、リレーションはきちんと取得できていない。というかちゃんとRDBになっていない。ORDERFACT
テーブルだけ、PRODUCTS
テーブルのPRODUCTCODE
が外部キーとして正式に設定されているので、ここだけ関連があるように見える。。。非常に残念ではあるものの、今回はデータをガリガリといじったりするわけではないので、このまま押し通すことにする。
それにしても、MySQL5.1のmysqldump
コマンドがしょぼいのか、作った人が手を抜いたのか、どっちなんだろう。。。
JDBCドライバのインストール
PDIにJDBCドライバを登録する。といってもドライバファイル(jar)をインストールディレクトリ下のlib
ディレクトリに配置するだけ(今回はすでに入手してあったものをそのままコピーしたが、なければMySQLのサイトからConnector/Jをダウンロードする)。
cp -p ~/devel/lib/jdbc/mysql-connector-java-5.1.45-bin.jar ~/pentaho/data-integration/lib
そしてspoonを再起動。
spoon
PDI設定
さて、PDI側の設定は、画面左上の新規作成ボタンからコンテクストメニューを出して、「データベース接続...」で行う、のだが当該項目はグレイアウト状態である(ファイルメニューの新規作成でも同じ)。
焦らずにまずは「新規作成」から「データ変換」を選んでETLデータフロー作成画面を出す。
再度新規作成ボタンを押す。
今度は「データベース接続」が活性状態になった。データベース接続情報(オブジェクト)はspoonインスタンス自体に紐づいて持つものではないということ。この場合は新規作成した「データ変換」の文書内で、データベース接続できるようになります、ということである。
今回はMySQLなので、「接続タイプ」からこれを選んで必要な項目を埋める。そして「テスト」ボタンを押下。
特段問題がなければこのように接続に成功する。これでDB接続準備は完了。「OK」して戻る。
pentaho-serverの導入
ここでさらに新規のデータ変換を作成してみる。そして「ビュー」を表示すると。。。
この通り新規作成したデータ変換からは、データベース接続が使用できない(各データ変換文書間でデータベース接続定義(オブジェクト)を共有できない)。このままでは毎ファイル作成するごとに、DB定義を設定しなおさなければならない。そこでpentaho-serverのリポジトリの登場となる。こいつを作成し、そのなかで作業をすることで、データベース接続定義(オブジェクト)を共有することができる(要は使いまわすことができる)。
インストールと起動
cd ~/pentaho
unzip ~/Downloads/pentaho-server-ce-8.1.0.0-365.zip
Tomcatベースなので、他のTomcatインスタンス向けにCATALINA_HOME
を定義している場合は値を変更しないといけない。起動スクリプト自体は用意されているので、環境変数を設定しつつスクリプトを実行するラッパースクリプトを書いておく(起動・停止スクリプト自体をいじるのは避けたいので。。。これを弄れ的なset-pentaho-env.shなるものもあるが、こちらもパッチ適用等して上書きされる可能性があるので、、、)。
echo 'CATALINA_HOME=~/pentaho/pentaho-server/tomcat ~/pentaho/pentaho-server/start-pentaho.sh' > /usr/local/bin/start-pentaho
echo 'CATALINA_HOME=~/pentaho/pentaho-server/tomcat ~/pentaho/pentaho-server/stop-pentaho.sh' > /usr/local/bin/stop-pentaho
chmod 755 /usr/local/bin/*-pentaho
start-pentaho
PDIからログイン
PDIからpentaho-serverへの接続は、spoonの画面右上の「Connect」ボタンを押す。
「Get Started」する。
「Display Name」に任意のリポジトリ表示名を入力し、次回以降面倒なので起動時に接続するようにし、「Finish」する。つまりspoon起動時にpentaho-serverも起動している必要がある。
無事にリポジトリができたので早速「Connect Now」する。
ユーザー名・パスワードは決まっていてadmin/password
。
無事に接続されると画面右上に接続先リポジトリが表示される。
なお、研修環境だったVersion8.0 on Winserver 2012では、リポジトリ表示名にマルチバイト文字を入れると、この右上のボタン自体が表示されなくなるというバグ(仕様?)があった。8.1で修正されたものか定かではないが、今回の環境では再現しなかった。念のため復旧方法を記載しておくと、このリポジトリ情報は~/.kettle/repository.xml
に保存される。このファイルを開き、name
要素を書き換えて(問題になっている文字をなくして)spoonを再起動すれば直せる。
<?xml version="1.0" encoding="UTF-8"?>
<repositories>
<repository> <id>PentahoEnterpriseRepository</id>
<name>Training</name>
<description>Pentaho repository | http://localhost:8080/pentaho</description>
<is_default>true</is_default>
<repository_location_url>http://localhost:8080/pentaho</repository_location_url>
<version_comment_mandatory>N</version_comment_mandatory>
</repository> <repository> <id>PentahoEnterpriseRepository</id>
<name>ほげ</name>
<description>Pentaho repository | http://localhost:8080/pentaho</description>
<is_default>false</is_default>
<repository_location_url>http://localhost:8080/pentaho</repository_location_url>
<version_comment_mandatory>N</version_comment_mandatory>
</repository> </repositories>
というわけで、リポジトリに接続できるようになったので、あとはこのなかにDB接続を作成しなおせば、複数のドキュメントで共有できる。というよりも、pentaho-serverを起動すると、hypersonicも起動してサンプルデータが参照可能になる。改めてIBM Data Studioでリレーションと主キーを予測オプションつきでリバースエンジニアリングしたER図。
長くなったので今回はここまでにしておき、次回はデータ変換のステップを逆引き的にまとめる。
-
Windowsの場合でも
*.sh
を*.bat
に読み替えるなどで同じように操作可。 ↩