目次

BAサーバのインストール

準備

 PentahoはJavaで書かれているため、JDKをインストールしておく。データベースサーバについては、MySQL、PostgreSQL、MS-SQLサーバ、Oracleなど主要なものに対応しているが、ここではマニュアルでお勧めされているPostgreSQLでインストールする。なお、データベースサーバがなくても内臓のHSQLDBで作動するため、データベースサーバの設定は必須ではないようである。ユーザとして試用する程度ならば、これで十分だろう。PostgreSQLについてはパッケージでインストールし、必要に応じてネットワークからアクセスできるように適当に設定をしておく。

 Linuxサーバ上に、「pentaho」ユーザを作成しておく。以降は、このユーザで作業を進める。

BAサーバダウンロード

 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
);

Quartzの設定

 以下のファイルを修正。PostgreSQL向けに設定されているので、確認のみで良い。

 以下のようになっているか確認。

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.dataSource.myDS.jndiURL = Quartz

Hibernateの設定

 以下のファイルを修正。

<config-file>system/hibernate/postgresql.hibernate.cfg.xml</config-file>

 上記修正後、そこで設定したファイル内のPostgreSQLの接続先、ユーザ名、パスワードなど接続情報を確認する。

Jackrabbit Repositoryの設定

 以下のファイルを編集し、PostgreSQLを利用するようにする。また、各セクションの既存の設定はコメントアウトか削除しておく。既にファイル内に各種データベース用の設定がコメントアウトされているので、PostgreSQLの部分を有効にする。また、必要に応じて接続情報を修正する。

 マニュアルには「DatabaseJournal」の設定も記載されているが、Community Editionでは必要ないようである。マニュアルに記載されている設定を記載しても、該当するデータベースが作成されていないので動作しない。また、「di_jackrabbit」データベースを作成する手順とスクリプトも見当たらない。

Tomcatのデータベース接続設定

 次に、データベースに必要な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では必要ないか、利用できないため記述しなくてもよい(と思う)。

Audit Log Fileの置換

 マニュアルのPostgreSQLの部分に記載はないが、MySQLでは記載がある。MySQLをPostgreSQLに読み替えて作業をする。Audit LogのためのSQLの設定らしい。

$ cp pentaho-solutions/system/dialects/postgresql/audit_sql.xml pentaho-solutions/system/

同梱のTomcatの起動と終了

 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との連携

ApacheとTomcatを連携させる。Tomcatはアプリケーションサーバに専念させ、フロントエンドはApacheとする。SSL通信などもApacheで設定するほうが慣れているため。。

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側

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="^{}[]|&amp;"
    maxHttpHeaderSize="65536" protocol="AJP/1.3"
    address="127.0.0.1"
    port="8009"
    secretRequired="false"
    redirectPort="8443" />    

最後に、ApacheとPentahoを再起動する。