逆に、Hadoopのデメリットを考えてみます。このような点が挙げられます。
それぞれ詳しく見ていきましょう。
まず、Hadoopはリアルタイムな処理には向いていません。そもそも分散処理を実行するためのオーバーヘッドがあるので※5、リレーショナルデータベースでも簡単に処理できるような小さなデータ処理の場合はHadoopで処理する方が圧倒的に時間がかかることもあります。そういった処理であれば、リレーショナルデータベースで処理したほうが間違いなく良いでしょう。
※5 タスクトラッカーやデータノードの起動など
なお、リレーショナルデータベースでは処理するのが難しいような大規模なデータをリアルタイムに処理したいのであれば、HBaseの利用を検討してみても良いかもしれません。
これは仕方のない話なのですが、MPIを使ってカリカリにチューニングした分散処理に比べるとどうしてもパフォーマンスでは劣るでしょう。ただ、MPIを使ってカリカリにチューニングするには非常に高い技術が求められます。そういった細かい部分がチューニングできない代わりに分散処理を“普通の”ユーザーでも簡単に扱えるようにしてくれたのがHadoopなのです。
ただ、設定によってある程度はパフォーマンスを上げることができます。その辺りの話については次章以降で詳しく取り扱います。
これはよく言われている話なのですが、HadoopではHadoop Streamingという仕組みによってJava以外でもさまざまな言語で処理を記述することができますが、Hadoop Streamingを使うことによってオーバーヘッドが発生します。これはHiveやPigでも同じことです。そのため、より高速に処理を実行したいのであればJavaを使って処理を記述する必要があります。
ただし、筆者個人の考えとしてはこれはそれほど気にしなくても良いのではないかと思っています。というのも、そもそもリアルタイムな処理ではなくバッチ処理でHadoopを利用するという前提なので、処理が4時間で終わろうが5時間で終わろうがそれほど変わらないだろうというのがまず1つあります。
さらに、処理にかかる時間も大切ですが、その処理を行う際に必要となるMapperやReducerを作成するのにかかる時間も非常に重要だろうという点です。慣れ親しんだ言語の方が簡単に処理を記述できるというのであれば、多少のオーバーヘッドがあるとしてもその言語を使った方が開発もスムーズだし、運用時も楽でしょう。
これは新しい技術を利用しようとする際には必ず問題となる点ではありますが、Hadoopの場合は特にその傾向が強いのではないかと思われます。主にこのような理由からではないでしょうか。
1点目の理由は分かります。分散処理は確かにあまり触れることのない概念だと思いますし、慣れるしかないでしょう。ただし、2点目の理由である大規模なデータ処理は「あなた」にも関係ある話です。他人ごとではありません。
Hadoopは確かに扱うのに少し慣れが必要な技術かもしれませんが、決してスーパーエンジニアでないと扱うのが難しい技術ではありません。誰にだって扱える技術なのです。「自分には関係ない」「難しそうだからいいや」などと言わず、ぜひ扱えるようになって欲しいと思います。
佐々木達也著
秀和システム 2400円(税別)
「ビッグデータ(=従来のコンピュータシステムでは、しまったり、探し出したり、調査したり、人間にわかりやすく加工したりが難しい、とても大きなデータ)なんて自分には関係ない」そう思っているエンジニアに贈る「Hadoop」の体験型入門書です。数億のユーザを抱えるSNSの利用データのように「雲をつかむような話」ではなく、Webサイトエンジニアや普通のプログラマが親しみを感じられるような普通のデータと、Amazon EMRという手軽な実験環境を使い、実際にHadoopを動かしてみます。手軽に短い時間で分散処理のメリットを体験することで、手元の業務に眠っているかもしれないビッグデータの活用に可能性を見出せるかも知れません。
Copyright © ITmedia, Inc. All Rights Reserved.