PentahoはJavaで書かれているため、JDKをインストールしておく。データベースサーバについては、MySQL、PostgreSQL、MS-SQLサーバ、Oracleなど主要なものに対応しているが、ここではマニュアルでお勧めされているPostgreSQLでインストールする。なお、データベースサーバがなくても内臓のHSQLDBで作動するため、データベースサーバの設定は必須ではないようである。ユーザとして試用する程度ならば、これで十分だろう。PostgreSQLについてはパッケージでインストールし、必要に応じてネットワークからアクセスできるように適当に設定をしておく。
Linuxサーバ上に、「pentaho」ユーザを作成しておく。以降は、このユーザで作業を進める。
Community Editionをダウンロードする。
コミュニティサイトの画面下部「Main Downloads」以下の「Business Analytics Platform」からBAサーバをダウンロードする。ダウンロードはSourceforgeから行われる。今回利用するバージョンは、Pentaho 7.0。バージョンによってインストール方法などが変更になっていたり、機能が増減していたりする一方で、マニュアルに反映されていない部分もあったりと、試行錯誤が必要。
zipファイルでダウンロードしたら、アーカイブを解凍する。解凍すると「pentaho-server」フォルダができるので、以降はこのフォルダを起点に記述していく。pentahoにはTomcatが同梱されており、今回はこれを利用する。既にアプリケーションサーバやTomcatが利用できる場合は、sourceforgeからpemtaho-manualというファイルを落とせばよいようである。
$ unzip pentaho-server-ce-7.0.0.0-25.zip
以下のドキュメントを参考に設定していく。一部、落とし穴がある。以下、パスはすべてpentaho-serverを起点にする。
ディスプレイが接続されていない、ないしはGUIが設定されていない環境向けにJAVAの起動オプションを設定する。Community Editionの同梱のTomcatはstart-pentaho.shで起動するため、このファイルを編集する。ファイル内の「CATALINA_OPTS」に「-Djava.awt.headless=true」というパラメータを追加しておく。ただし、実際に利用してみてオプションの効果はよくわからない。
以下のスクリプトを利用して、PostgreSQLに必要なデータベースを作成する。マニュアルには4つのファイルが記載されているが、Community Editionには3つしかない。
これらのファイル内に、作成されるデータベースユーザとパスワードが記載されているため、必要に応じて編集する。以降、各所のDB設定では、ここで修正した内容に置き換える。ファイルはすべてSQLであるため、どのような形でもPostgreSQLで実行すればよいが、コマンドラインツール「psql」を利用する場合は、以下。
$ psql -U postgres -f data/postgresql/{ターゲットファイル}
ここでマニュアルにない落とし穴。Quartzデータベースに不具合があり、そのままではpentahoの起動に失敗する。後の設定でテーブルのPrefixを設定するが、起動時の確認の際にはこの設定がうまく効いていないようで、テーブルの確認が失敗するようだ。なので、ダミーのテーブルを作成してやる必要がある。バグなのか?ソースを共有しているはずであるが、有償版では問題ないのだろうか?
先ほど作成したquartzデータベースに、以下のSQLでダミーのテーブルを作成する。
CREATE TABLE "QRTZ" ( "NAME" character varying(200) NOT NULL );
以下のファイルを修正。PostgreSQL向けに設定されているので、確認のみで良い。
以下のようになっているか確認。
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate org.quartz.dataSource.myDS.jndiURL = Quartz
以下のファイルを修正。
<config-file>system/hibernate/postgresql.hibernate.cfg.xml</config-file>
上記修正後、そこで設定したファイル内のPostgreSQLの接続先、ユーザ名、パスワードなど接続情報を確認する。
以下のファイルを編集し、PostgreSQLを利用するようにする。また、各セクションの既存の設定はコメントアウトか削除しておく。既にファイル内に各種データベース用の設定がコメントアウトされているので、PostgreSQLの部分を有効にする。また、必要に応じて接続情報を修正する。
マニュアルには「DatabaseJournal」の設定も記載されているが、Community Editionでは必要ないようである。マニュアルに記載されている設定を記載しても、該当するデータベースが作成されていないので動作しない。また、「di_jackrabbit」データベースを作成する手順とスクリプトも見当たらない。
次に、データベースに必要なJDBCドライバをインストールする。
上記のパスにドライバのjarファイルを置く。
以下のファイルに接続情報を記載する。注意しなければならないのは、マニュアルをそのままコピーしてしまうと、一部で大文字と小文字が間違っていて、動かない。一見すると問題ないように見えるので厄介である。ファイル内にある既存の接続設定をよく参照して、大文字・小文字の区別まで含めてきっちり設定を作成する。
<Resource name="jdbc/Hibernate" auth="Container" type="javax.sql.DataSource" factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxTotal="20" maxIdle="5" maxWaitMillis="10000" username="hibuser" password="password" driverClassName="org.hsqldb.jdbcDriver" url="jdbc:postgresql://localhost:5432/hibernate" validationQuery="select 1" /> <Resource name="jdbc/Quartz" auth="Container" type="javax.sql.DataSource" factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxTotal="20" maxIdle="5" maxWaitMillis="10000" username="pentaho_user" password="password" driverClassName="org.hsqldb.jdbcDriver" url="jdbc:postgresql://localhost:5432/quartz" validationQuery="select 1" /> <Resource name="jdbc/Audit" auth="Container" type="javax.sql.DataSource" factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxTotal="20" maxIdle="5" maxWaitMillis="10000" username="hibuser" password="password" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/hibernate" validationQuery="select 1" />
マニュアルには「pentaho_operations_mart」「PDI_Operations_Mart」の設定もあるが、Community Editionでは必要ないか、利用できないため記述しなくてもよい(と思う)。
マニュアルのPostgreSQLの部分に記載はないが、MySQLでは記載がある。MySQLをPostgreSQLに読み替えて作業をする。Audit LogのためのSQLの設定らしい。
$ cp pentaho-solutions/system/dialects/postgresql/audit_sql.xml pentaho-solutions/system/
pentaho-server以下のstart-pentaho.shでTomcatを起動する。JavaVMのメモリ割り当てなどもこのファイルに設定する。初回起動時はバージョン確認のプロンプトが出るので、一読してenterキーを押せばしばらくしてTomcatが起動する。やや時間がかかる。うまく起動しない場合は、Tomcatのログやデータベースサーバのログを確認して、うまく接続できているかなどを確認していく。Tomcatのcontext.xmlの大文字・小文字の違いに気づかず、データベースに接続できなくてハマった。。。
pentaho-serverの終了は「stop-pentaho.sh」を使う。
Tomcatの再起動に時間がかかる場合があるので、Tomcatに以下の設定をしておく。Tomcatは「WEB-INF/libのアノテーションをVMがスキャンするので」再起動が遅いらしい。これを回避するには、web.xmlに以下を記述する。pentaho-server内にはいくつかweb.xmlがあるが、とりあえず全部に記載しておく。
$ find . -name "web.xml" -print ./tomcat/webapps/pentaho-style/WEB-INF/web.xml ./tomcat/webapps/ROOT/WEB-INF/web.xml ./tomcat/webapps/pentaho/WEB-INF/web.xml ./tomcat/webapps/sw-style/WEB-INF/web.xml ./tomcat/conf/web.xml
web.xmlの<web-app>要素内に、以下のmetadata-complete=“true”属性と<absolute-ordering />要素を加える。
<web-app metadata-complete="true"> <absolute-ordering />.... .... ....
BAサーバが起動したら、そのホストの8080ポートにアクセスし、ユーザ名「admin」、パスワード「password」でログインする。
サーバ起動中のログは以下のファイルに出力される。うまく動作しない場合などに確認する。
以下の基本設定ファイルを確認し、適宜編集する。
PentahoのWebインターフェイスではJavaScriptが多用されている。fully-qualified-server-urlはそのスクリプトなどを呼び出すためのURLを構築するための基礎になる。Tomcatをフロントエンドに使っている場合は問題にならないが、Apacheと連携する場合には、表面的なURLと内部でのURLがずれるため、ベースURLを設定しないとうまく動作しない。バージョン7.0まではうまく動作したが、7.1からは設定しないと動かないようである。アップグレードの際には注意が必要である。
<!-- <context-param> <param-name>hsqldb-databases</param-name> <param-value>sampledata@../../data/hsqldb/sampledata,hibernate@../../data/hsqldb/hibernate,quartz@../../data/hsqldb/quartz</param-value> </context-param> -->
<!-- <listener> <listener-class>org.pentaho.platform.web.http.context.HsqldbStartupListener</listener-class> </listener> -->
サンプルデータではないが、本番システムでは不要なメッセージを出すので、以下もコメントアウト。
<!-- <filter> <filter-name>SystemStatusFilter</filter-name> <filter-class>org.pentaho.platform.web.http.filters.SystemStatusFilter</filter-class> <init-param> <param-name>initFailurePage</param-name> <param-value>InitFailure</param-value> <description>This page is displayed if the PentahoSystem fails to properly initialize.</description> </init-param> </filter> -->
<!-- <filter-mapping> <filter-name>SystemStatusFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> -->
ApacheとTomcatを連携させる。Tomcatはアプリケーションサーバに専念させ、フロントエンドはApacheとする。SSL通信などもApacheで設定するほうが慣れているため。。
連携にはmod_proxy_ajpを利用する。Gentoo LinuxではUSEフラグで「proxy_ajp」を設定してコンパイルする。
mod_proxy_ajpを利用可能にしたうえで、ProxyPassでTomcatの接続設定を行う。
ProxyPass /pentaho ajp://localhost:8009/pentaho ProxyPass /pentaho-style ajp://localhost:8009/pentaho-style
TomcatのローカルなWebサーバを停止して、ajp用のポートを開ける。pentahoの内蔵Tomcatでは、標準でajpポートは空いているようである。
ローカルのWebサーバを無効にする
tomcat/conf/server.xmlの以下の個所をコメントアウトする。
<!-- <Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->
以下のajpコネクタの設定が有効になっていることを確認する。ポート番号が上記ProxyPassと一致していることを確認する。
Pentaho9.1から「secretRequired=“false”」を追加しないとApacheから接続できない。Tomcatのバージョンアップによるものか。
<Connector URIEncoding="UTF-8" relaxedPathChars="[]|" relaxedQueryChars="^{}[]|&" maxHttpHeaderSize="65536" protocol="AJP/1.3" address="127.0.0.1" port="8009" secretRequired="false" redirectPort="8443" />
最後に、ApacheとPentahoを再起動する。