Hadoopの異端さが面白い

Hadoopはほんとブームです。バブルだと言っていい気がします。各種セミナーはすぐに埋まりますし、実際に聞きに行くと会場は満員です。

この分野は日本だとNTTデータが先頭をきったように見えます。
NTTデータ、Hadoopの商用ディストリビューション「CDH3」を販売開始 | 日経 xTECH(クロステック)

またHadoop専業会社「ノーチラス・テクノロジー」というのもできました。
ウルシステムズとイーシー・ワンが経営統合、Hadoop専業会社を立ち上げ | 日経 xTECH(クロステック)

しかし最近では富士通IBMHadoopソリューションを展開しておりレッドオーシャンな感じです。
富士通がビッグデータ分析・活用向けのPaaSサービス | 日経 xTECH(クロステック)
日本IBM、表計算のように分析できるHadoopソフト新版「BigInsights」 | 日経 xTECH(クロステック)

一方でいろいろ情報収集してみてわかってきたのはHadoopはかなり異端児だということです。

それはまずこの技術がSIerとWeb業界の両方にニーズがあるということから話が始まる気がします。

あ、SIerとかWeb業界っていうと曖昧な感じですが、ここでは前者がメーカー, NTT系の会社で、後者が自社でWebサービスを展開している会社ぐらいのイメージで書いてます。
このブログ書かせてもらってるはてながそうですね。

大量のログを解析して(BI)売り上げを大きくしようというのはWeb業界よりの話ですが、
金融やテレコムのようなSIer, エンタープライズの領域でもビックデータ(これもバズワードですねw)の解析が必要になってきており実際に事例も紹介されてますね。

僕自身はずっとSIerに勤めているのでWeb業界のことはそんなにわからないですが、ネットの情報から判断するにいままではSIerとWeb業界では使っている技術が違うように見えました。

例えば言語でいえばSIerJavaで、Web業界はRuby, PHP, Perl, PythonといったLL言語を使っているイメージがあります。
使うDBもSIerならOracleでWeb業界ならMySQLとか。

かなり単純化してますねw

一方でHadoopにはそういう敷居は無いように見えます。まあWeb業界ならBIよりでSIerなら基幹バッチとかはあるかも。

Hadoopは多数のマシンを活用する分散技術なわけですが、それがゆえの難しさがあります。

まずMapReduceプログラムをJavaで直に書くのは難しいし工数がかかりすぎるでしょう。
なのでPig, Hive, AsakusaといったDSLが必要とされてくるでしょう。

そしてテストが難しいです。

その辺はこの辺参照
Hadoopのテスト環境はどうやるのがいいのか? - Togetter

それゆえHadoopで大規模SIは難しいでしょう。

大規模SIというと、まず業務SEが仕様を整理し、DBAがテーブル設計をし、インフラSEがハードウェアを整備し、数百人のオーダーのアプリ開発者が実装するというモデルです。

業務SE、インフラSE、DBA、アプリ開発者はそれぞれ連携とって作業を進めますが、役割ははっきり分かれるでしょう。

アプリ開発のやり方はというといろいろあるでしょうが、例えば共通チームがフレームワークやライブラリを選定し基盤を作る。
その後ツールを使ってExcelからソースを自動生成し(例:Struts 1.2のAction, ActionForm)、ビジネスロジックを各開発者がゴリゴリ書く。

そして結合試験で多少?炎上しなんとか納品するというモデルですw

プロセスとしてはWFといえばWFですが、要件の実現性を検討するためにスパイクすることもあるので、それほどガチガチにはならないと思います。

例えば仕様、設計が決まるまで実装してはいけません的な経験は僕自身は無いです。

開発プロセスとしてはWFよりだと思いますが、そもそもWFとアジャイルの定義ははっきりしてないと思っているのでこの用語を使うのは止めときますw

じゃあHadoop案件をどう回すかという話になりますが、今のところ少数精鋭が無難でしょう。これを言ってしまうと身も蓋もないですがw

ただアプリとインフラの両面のスキルが必要になってくる気がします。

というかどっちもいままでの求められていたスキルとは違いそう。

例えば100台のHadoopクラスタを構築するには、KickStartで自動インストールして、Puppetで設定ファイルを管理して、Gangliaで監視して、DRBDでNameNodeを冗長化して、
みたいなことが必要になってきますが、これをスムーズにできるインフラSEはそう多く無いでしょう。てか100台単位のマシンを相手にしたことある人ってSIerには少なそうな気がします。
ただ日々大量のWebアクセスを経験しているB2CのWeb業界の人なら別かもしれません。

インフラの人もある程度アプリ側というかHadoopのことを分かってないとトラブルシューティングは難しそうです。
まあアプリ側の人がインフラをキャッチアップするでも良いと思いますが、いずれにせよ両面知っとかないと辛いかも。強みはどちらかにあるとしてもです。

またインフラやテストを効率化するために仮想化の話もありますが、Hadoopとの相性はあまりよく無さそうです。

その辺はこの辺参照
Hadoopは仮想化の流れに逆行するのか? - Togetter

一方アプリ開発もStruts1.2を使ってWebアプリ作るのとMapReduceのアプリを開発してデバッグしてテストするのは同じJavaを使うのでも全然違います。

Hiveを使ってデータウェアハウス構築する場合はアプリ寄りのスキルよりもDBA寄りのスキルのほうが遥かに重要です。

かようにいままでのスキルとは違うというか、いろいろなスキルが要求されると思うのでですが、その一方でどのスキルも各人がいままでそれぞれ蓄えたスキルの延長にあるような気がしています。

その意味で各人が持っていたスキルをのばしつつ別のスキルもキャッチアップするのがいいですね。

ちなみにJavaアプリ開発メインだった僕は実務でHiveをやっていることもありDBよりのスキルの必要性を感じてますね。
一方でHadoop, HiveともにJavaで実装されているのでその意味では入りやすいということはあると感じています。

相変わらず、なんかまとまってない気がしますが(汗、とりあえず脳内を出してみますた。