2013年振り返り

2013年の振り返りです。一言で言うとHadoopでログ解析してました。データ量がどんどん増えてそれにともないノード数も増えました。あとジョブ数も増えましたね。扱うミドルウェアHadoop/HiveだけじゃなくてHBaseやStorm、あとはAzkabanやfluentdといったものも触りましたね。そんなこんなで運用コストが増えました。僕自身はそんなに企画者とやりとりして統計データを抽出するといった仕事はやってなくて、どちらかというとDevOpsでいうならOpsよりです。まあ、なんちゃってHadoopオペレーションエンジニアですね。

入社した2012年11月から当初はログをmapreduce+HFile bulk loadでHBaseにぶっ込んで、あとはそれを検索するWebアプリを作ってました。

その後2月くらいからは別のログをfluentd+WebHDFSでHadoopにぶっ込んでAzkabanでスケジューリングしてHiveで集計する仕事を担うようになりました。fluentdは当初1プロセスで動かしていましたがCPU負荷が高くなってきたので複数プロセスで実行するようになりました。

で、この上記2つは別々のHadoopクラスターだったのですが、joinする必要もあったりで1つのクラスターに統合しました。

HDD障害が多発したのはこの辺からですかね。。。他にもHLogのsyncに失敗してRegionServerがダウンする問題が多発していたのも4月とか5月とかその辺だったと思う。

仕事と関係ない話では5月からちょっとづつ走り始めました。あと11月からフットサルもするようになりました。

7月はHDD溢れによるNameNodeダウンとかShuffleがうまくいかなくてReduceが遅くなったりとかもありました。

HBaseとHiveの連携もやったのですが、まあこれも普通にやると性能が全くでなくてコストがかかる作業でしたね。周りにHiveマスターとHBaseマスターがいてその人たちが先陣を切って動くところまでやったので僕はそれをメンテしているだけです。

あとぶっちゃけ統計、集計仕事でHBaseは普通は要らないと思います。大量データに対してリアルタイムに検索したいとかならHBaseを使わざるを得ないと思いますが、まあ基本はHadoop/Hiveで十分だと思います。HBaseがあると運用コストがどうしても上がってしまいます。mapreduceジョブががんがん流れるような環境でのHBaseの運用だとなおさらですね。Hadoopオペレーションも良い本ですがHBaseオペレーション本も求められますね。

HBaseのコプロセッサーも使いましたが不安定だったので結局Stormに切り替えました。

周辺ツールの話をするとAzkabanはcronよりははるかにいいですが、下記の点ができればもっと良いと思います。Azkaban2ではどうなんでしょうか。

  • JP1用語でいうジョブネット単位で依存関係を定義できない。ジョブ単位での依存関係の定義はできますが、ジョブを複数まとめたジョブネット単位での依存関係が定義できません。
  • 日付を指定してジョブ実行ができない。
  • 月次処理ができない
  • ジョブの削除がWebからできない。

fluentdは最近バージョンアップしてついでにGrowthForecastもJSON APIが使えなかったので最新の0.80を使うようにしてrb-growthforcastで複合グラフ作ったりとかしました。

Hadoop/Hive/HBase/Javaのバージョンアップも行いました。

バージョンアップ後はShuffleがうまくいかなくてReduceが遅くなったりとかは無くなった気がしますし、RegionServerダウン問題も無くなったと思ったのですが、こちらは最近またちょっと出始めましたね。。。NameNodeのGCが関係しているような感じなのですが、どうしたものやら。。。

まあこんな感じです。来年も健康に過ごせれば何よりです。