ログ分析環境を少しづつ作ってる
まだ本格的な運用は始まっていないけどログ分析環境を少しづつ作ってるのでメモっておく。
ETL処理は既存資産の活用を考慮してPython 2.7でやっています。
hiveserver2との接続はpythonからhiveserver2につなごうとしていろいろハマったのでメモっておく - wyukawa’s blogに書いた通りだいぶ苦労したけど独自にpatchあてて対応した。
sqoop imortもやりつつある。最初はsqoop2を使おうかなと思ったけどhiveとの連携がまだみたいなのと、既存資産の活用もあって古いsqoopのまま処理を進めている。
Hiveからselectして結果をMySQLへinsertする部分はMySQL-Python使っています。この辺も既存資産があるからですね。
Python 3は使っていないので下記にあるような事情は今回特に関係ないです。とはいえPython 3も少しは考えた方がいいのかな。。。
MySQL-python の Python 3 対応 - methaneのブログ
MySQLは2台用意してmaster/slaveのレプリケーションをおこなっています。
ETL処理ではmasterに接続して更新して、BIツールはslaveを参照するようにしています。slaveはread onlyです。
my.cnfはMySQLの設定ファイル my.cnf をgithubにて公開しました & チューニングポイントの紹介 - blog.nomadscafe.jpを参考にしています。
ジョブ管理はazkabanを使い始めています。ジョブが失敗した場合にメール通知するようにしているのですが、メールフォーマットが壊れているのでFix for GitHub issue #247 fix failure email link is broken by wyukawa · Pull Request #248 · azkaban/azkaban · GitHubでpull requestしています。
azkabanも独自patchを組み込んだ関係で現在リリースされている2.5ではなくGitHubにある2.6のものにpatchあててビルドしたものを使い始めました。まあなんかあったら2.5に戻すかも。
azkabanをソースからビルドする方法はhttp://azkaban.github.io/azkaban2/docs/2.5/#building-from-sourceに書いてあります。ここを見るとnpmとantが必要に見えます。
ただし、azakban 2.6からはどうもgradleベースになったようなのでantではなくgradleを実行します。
僕はbrew install gradleしてからビルドしました。ただJDK1.6だと「Failure initializing default system SSL context」とかいわれたのでJDK1.7にしました。
nodeのインストールはxbuild経由で行いました。
ただし、xbuildのREADMEにあるように
xbuild/node-install v0.10.26 ~/local/node-v0.10
とやるとmacの場合はnodeを実行したときに「cannot execute binary file」といわれてうまくいきません。
これ、ちょっと悩んだんですけどxbuild/node-installをそのまま実行すると答えがあります。
$ xbuild/node-install [usage] node-install [-f] VERSION LOCATION [arch] ex: node-install v0.10.26 ~/local/node-v0.10 ex: node-install v0.10.26 ~/local/node-v0.10 darwin-x86 default arch is 'linux-x64'
そう、node-install v0.10.26 ~/local/node-v0.10 darwin-x86 のように最後にarch引数が必要です。
まあそんな感じです。
あとHadoopクラスタも今後新規に構築することになると思いますが、古き良きstruts 1じゃなくてMapReduceから、struts 2じゃなくてYARNに突入する以外に選択肢はなさそうなのでそこは少し覚悟が必要ですね。どうせJavaでアプリ書くことはなくてHiveしか使わないと思うんですが、何か起きたときの運用ノウハウが全然無いし情報もまだそんなになさそうです。秘伝のタレ的なYARNの設定ファイルや運用ノウハウを是非詳しそうな人に聞いてみたいです。チラチラ。