Hadoopはルイーダの酒場

昨日の深夜に某氏講師による「JavaエンジニアのためのHadoop入門」 の話題がネタになってましたが、僕はJavaエンジニアとしてキャリアを積んできてHadoopに入門しました。キリ

HadoopJavaで書かれているのでJavaエンジニアのキャリアのひとつとしていいと思いますけどね。

当初はHiveでデータ処理をしていましたがうまくHiveQLが書けず、DBエンジニアからHadooperになった人にSQLやデータモデルについて教えてもらったりしてました。

最近はインフラまわりをやるようになって、HeartBeatわかんねーーーーってなって、インフラエンジニアからHadooperになった人にいろいろ教えてもらったりしてました。

かようにHadoopを使う場合はいろいろなスキルが求められます。

まずインフラ構築、運用ならざっと下記のような作業が必要になるでしょう。

  • ハードウェア選定
  • ハードウェア購入
  • ラッキング
  • ケーブル結線
  • Kickstartなどの手段でOS自動インストール
  • ネットワーク設定
  • Hadoopインストール
  • HeartBeat+DRBDでHA構成を組み、NameNodeとJobTrackerのSPOF対策を行う
  • Gangliaなどのモニタリングツールでリソース監視
  • Zabbixのような監視ツールで障害が起きたら通知するようにする
  • Puppetのような構成管理ツールで設定ファイルを管理する

要はHadoop徹底入門の7章〜9章のことをやる必要があります。

個人の開発環境であればローカルのVirtualBox上のVMで擬似分散環境を作るぐらいでいいかもしれませんが、プロダクション環境となると上記のような冗長化は必要でしょう。これはNameNodeとJobTrackerだけじゃなくてネットワークの冗長化も含む。さらに扱うマシンも多くなるのでKickstartやPuppetのようなツールを使う必要もあるでしょう。

またHadoopではマスターとスレーブでは使うハードウェアを変えることもあるでしょう。これはNameNodeはメモリがたくさん必要だけどスレーブはディスクが重要だからです。mapred.local.dirやdfs.data.dirといったスレーブノードが扱う領域はディスクの数を多くして性能向上を図ることが一般的です。ちなみにFacebookでは12台ものディスクを使っているようです。fdiskコマンドとかmkfsコマンドとかmountコマンドとかアプリ屋さんがあんま打たないコマンドをすらすら打てるインフラエンジニアかっこいいです。

まあAmazonのEMR使えば上記のような手間はかなり少なくなるはずなのでそっちを検討するのもいいでしょう。


このようにしてインフラが整ってはじめてHadoopできます。

開発環境や構成管理どうすんだーっていう話はありますが、この辺はまだ確固たる方法論が見えてない気がします。本番=開発でみんなでSSHでログインして作業するという昔に戻った感じの現場もあるかもしれません。

Hadoopで直MapReduceだと大変なのでHiveやPigを使うかもしれません。

Hiveの場合はDBに関するスキルがあると強いです。どのようにテーブル設計し、HiveQLを使ってどのようにデータ処理するかというデータフローを考えるのはDBエンジニアが得意だと思います。

別にHive使わなかったとしてもDBに関するスキルは有効だと思います。IO関係に鼻が利くでしょうから。

実はデータというかログを解析する場合は、他にもシェルスクリプト力だったりawk力だったり折れない心だったりが必要なわけですが、まあその辺は現場の方はよくご存知でしょう。


Hadoopを使っていると障害や性能面で困ることがでてくるかもしれません。その辺は28日の某イベントで某氏がわかりやすく説明してくれると思いますがw HadoopそのものだけでなくOSレベルの知識も必要だったりします。

この辺はHadoop徹底入門の10章にも出てきます。Hadoop徹底入門をヨイショしてますが、Hadoopの構築、運用、パフォーマンスチューニングなどの分野では参考になるでしょう。それ以外の章は大半がHadoop 0.21ベースの話なので0.21を使ってない人は象本2版のほうがいいでしょう。


で、BIなら最後に統計というか分析系のスキルがいかせる場面がくるわけです。データ解析の仕事の9割はデータの準備だというのが某ブログにあがってましたがその通りでしょう。

分析屋さんが今あるデータと関心事をもとに必要な解析手法を選んでデータ解析して意思決定者に提示する。そして何らかの施策が打たれることによって良い方向に向かって行くわけです。


Hadoopはそのような現場で使われているもので、アプリケーションエンジニア、インフラエンジニア、DBエンジニア、分析屋さん、といった多種多様なエンジニアが集まるエキサイティングな場になることがあります。

各エンジニアそれぞれ強みもあれば弱みもあるでしょう。でもお互いの強みを発揮していいパーティーを編成していい仕事ができればこれは素晴らしいことです。

Hadoopはそういう出会いの場というかドラクエルイーダの酒場的な香りを持っているなあと最近思い始めました。