Pentaho DataIntegrationで自分専用ETLサーバをつくる
構築するもの
PentahoDataIntegration(PDI)を用いて自分専用のETLサーバ
- OSからETLまでOSSの利用でコストを極力抑える
- ユーザーとのデータ受け渡し口としてhttpを利用
PentahoDataIntegration(PDI)はバージョン6.1を利用します。http通信でデータをxmlで返却する際に7以降、最新の9でも日本語が文字化けしてしまい使えません。解決方法をご存じの方いらっしゃいましたら教えていただきたいです。
どうして自分専用ETLサーバがほしいのか?
仕事でETLは便利に使用するわけですが、システムの1部として組み込まれているETLは支障が出るとシステム全体に影響が出てしまうので困ります。仕事柄ユーザーからの依頼で必要なデータの整形取り出し等をするわけですが、BIツールなどのしっかりした開示ツールがなかったり、あっても目的のデータベースには接続されていなかったり・・・。かといってデータベースへの直接接続を開放してSQLを開示しておく、なんていうわけにもいきません。そんな時に重宝するのが自分専用ETLサーバなんです。
PDIはコミュニティ版ならOSSで料金を気にせず使用できます。ローカルのスタンドアローンで利用するだけでも十分便利なのですが、サーバー立てて常時アクセスできるようにしておくとできることが増えて楽しいです。
環境
- CentOS7(仮想マシンで大丈夫)
- Open-JDK 8
- httpd(apache)
- PentahoDataIntegration
CentOS7はminimalインストール
yum update
yum install java-1.8.0-openjdk
yum install httpd
systemctl start httpd
systemctl enable httpd
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
で最新化後Open-JDKとapacheをインストール。
apacheはサービス起動と自動起動を設定しておきます。
ファイアウォールはhttpを開放しておきます。
また、SELinuxは無効化しておきます。(内部向け想定です)
setenforce 0
vi /etc/selinux/config
SELINUX=enforcing
↓
SELINUX=disabled
PDIインストール
PDIはこのページからpdi-ce-6.1.0.1-196.zipをダウンロードします。必要に応じてpdi-ce-6.1.0.1-196.zip.sumでダウンロードを検証してください。
pdi-ce-6.1.0.1-196.zipを解凍しできたdata-integrationディレクトリを/opt/配下に移動します。
準備ができたらPDIの起動用スクリプトを作成します。
PDIをサーバとして起動する場合carte.shを使用します。また、起動時の設定ファイルはcarte-config.xmlを指定しました。
carte-config.xmlの作成
/opt/data-integration/pwd/配下に見本になるファイルがありますので参照してください
cd /opt/data-integration
vi carte-config.xml
<slave_config>
<slaveserver>
<name>master1</name>
<hostname>192.168.0.1</hostname>
<port>9001</port>
<username>cluster</username>
<password>cluster</password>
<master>Y</master>
</slaveserver>
</slave_config>
ポート番号は他と被らない適切なものを設定
hostnameのIPアドレスは環境に応じて変更
後ほどhttpd経由でアクセスする際にはhostnameをlocalhostに変更する予定
PDIサーバ起動スクリプト
cd /opt/data-integration
vi pdi-server.sh
#!/bin/sh
/opt/data-integration/carte.sh /opt/data-integration/carte-config.xml
実行権限の付与も忘れずに
chmod +x pdi-server.sh
PDIのサービスを作成します
vi /etc/systemd/system/pdi-server.service
[Unit]
Description = Pentaho Data Integration Server
[Service]
ExecStart = /opt/data-integration/pdi-server.sh
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target
作成できたらサービス起動と自動起動の設定
systemctl start pdi-server
systemctl enable pdi-server
起動できたら
http://192.168.0.1:9001
にアクセスしてみる(IPアドレスは自分の環境のものに)
firewallで遮断されていないか要注意
スレーブサーバメニュー
ステータスの表示
というページが表示されればOK
最後にhttpdに転送してポート番号無しで接続する設定
/opt/data-integration/carte-config.xmlの設定を変更
<hostname>192.168.0.1</hostname>
↓
<hostname>localhost</hostname>
に変更して
systemctl restart pdi-server
でPDIをlocalhostで待ち受けするように変更します。
続いてhttpdの設定
vi /etc/httpd/conf.d/pdiserver.conf
<VirtualHost *:80>
ServerName 192.168.0.1
DocumentRoot "/var/www/html"
<Location />
ProxyPass http://localhost:9001/
ProxyPassReverse http://localhost:9001/
SetEnvIf Request_URI "/kettle/executeTrans/?$" HAVE_execTrans
RequestHeader append Authorization "Basic Y2x1c3RlcjpjbHVzdGVy" env=HAVE_execTrans
</Location>
</VirtualHost>
httpd.confはvirtualhostの設定をconf.d配下のファイルを読み込むように変更しておいてください。
RequestHeader append Authorization "Basic Y2x1c3RlcjpjbHVzdGVy"
はPentahoのデータ変換実行時のベーシック認証を回避するために入れたものです
Y2x1c3RlcjpjbHVzdGVy部分が
cluster:clusterをBase64エンコードしたものになります。
設定できたら
systemctl restart httpd
でhttpdを再起動し、
http://192.168.0.1
にアクセス。
スレーブサーバメニュー
ステータスの表示
が無事に表示されれば完了です。
2021/08/15 SELinux停止しないとmod_proxyのProxyPassが動作しなかったため修正
Discussion