ClouderaManagerAPIを使ってHadoopジョブの状況を可聴化する
はじめに
この記事はドワンゴ Advent Calendar 2015 - Qiita および Cloudera Manager Advent Calendar 2015 - Qiita の 12/3 分の記事です。
Hadoopを運用するにあたって欠かせないもの、そうClouderaManager。みなさんもちろんClouderaManager使ってますよね。使ってない人は今すぐ入れましょう。
ClouderaManagerはとにかく最高で、クラスタのセットアップもさくっと終わるし、綺麗なグラフでクラスタの状況わかるし、ユーザが投げているクラスタジョブの状況も見れたりして最高に便利で、僕なんか仕事中の8割位はClouderaManagerのこと気になってしょうがないんだけど、とはいえドキュメント書いたりコード書いたり設計したり会議に出なくてはいけないのでずーっとClouderaManagerを見ているわけにはいかない。
とはいえ運用してるとHadoopクラスタの状況が気になってしょうがないので、ClouderaManagerのAPI経由でHadoopクラスタの様子を可聴化することにした。
ClouderaManagerAPI
ClouderaManagerはほとんどの機能に対してAPIを提供している
更新操作もできるけど、今回はReadオンリーのユーザであるapiユーザを作成した。 Yarnジョブの様子を見たいときはこんな感じで叩くと取れる
ドワンゴではHadoopクラスタにジョブを投げる用の内製フロントエンドを作っていて、Jobの様子はJobTrackerUIをスクレイピングして独自UIに表示したりしている。Hadoop2系に移行するときにJobTrackerじゃなくなって困ってたんだけど、ClouderaManagerAPI経由でみんなが使い慣れた画面そのままに移行することができた、本当に便利。
可聴化
neume.js
音のことよくわかってないし、WebAudioとかわからなかったけど使い勝手が良さそうなのでneume.jsを使った。わかりやすくてよかった。
ジョブの状況で音を出す
ClouderaManagerではYarnジョブを一覧で見ることができる。 運用しているときだいたい
- 実行中のジョブ数
- 実行中のMapper数/Reducer数
あたりを個人的によく見ている、ということで、ジョブのMapper数を音の高さでジョブの数を音の繰り返しで表現することにした。
Mapper数が 100,50,100のジョブが走っているときはこんな感じの音が出る
スタートの合図として880Hzの音を鳴らしてからBPM120でMapper数Hzで音が出るようにした。
波形で説明するとこんな感じ
スタートの合図から次の合図までの間隔でジョブ数がわかるし、その間に鳴る音の高さでMapperをどのくらい使ってるジョブなのかがわかって便利。
これをひたすらループする。
普通に稼働してる時はこんな感じの音がずっと流れる
Mapper数が大きければ大きいほど頭に刺さる感じになるし、小さいと休符っぽくなったり低音が出て臨場感ある。
まとめ
ClouderaManagerAPIとneume.jsでHadoopジョブの状況を可聴化した。
本当はMapperの様子を右耳に出してReducerの様子を左耳に出して、クエリ投げたユーザごとにスケール変えたりジョブ投げてるユーザの人数でBPM変えて賑やかな感じにしたり演奏っぽくしたくていろいろやってたんだけどわけわかんなくなってきて一旦Mapper数とジョブ数だけにした。任意のジョブのMapper数だけわかれば大体傾向つかめるしまぁ問題ないってことでこうした。
ずーっと聞きながら仕事してると大体どんなジョブ走ってるかClouderaManagerを目で見なくても感じ取れることができるので便利。
作ってる途中にめちゃくちゃでかいジョブ来たりして頭ぶっ壊れそうになったりするのでうまいことやらないとそのうち耳壊すと思う。
ログ可聴化について
ログを可聴化するのはすごくよくて、デプロイ前後っていろいろ確認しなきゃいけないものがあると思うけど一部のモニタしたい内容を可聴化するだけで同時処理できるものが増えて効率上がる
— み (@negipo) 2012, 10月 31
パソコン向かって仕事してる時、自分へのインプットは目しか使ってない気がするしもっと耳も使ったほうがいいと思った。ついでに背中に電極つけて腰辺りに電流流れてきたからネットワークトラフィック増えてるなみたいなこととかやるともっと体を有効に使えると思う。
最後に
ドワンゴではデータ基盤を全身で感じてみたい大規模データ基盤エンジニアを募集しています。