Hadoop

概要と重要性

Hadoopは汎用ハードウェアの大規模クラスター上で分散型の手法でビッグデータを保管・処理するためのオープンソースのソフトウェア・フレームワークです。基本的には、大容量ストレージと高速処理の2つを実現することを目的としています。

初心者の皆さん向けに、まずは主な用語の意味を押さえておきましょう。

  • オープンソースのソフトウェア: オープンソースのソフトウェアは、幅広いオープンな開発者ネットワークによってプログラムが開発・管理される点が、商用ソフトウェアと異なります。伝統的にオープンソースのソフトウェアはダウンロードして利用するのも、開発に貢献するのも無料ですが、Hadoopに関しては商用バージョンとして提供されるものが増え続けています。
  • フレームワーク: ここでのフレーワークとは、ソフトウェア・アプリケーションの開発と実行に必要となる全てのもの(プログラム、ツールセット、接続など)が提供される総合的な環境を意味しています。
  • 分散型: データが複数のコンピューターに分散して保管され、複数の接続されたマシンにまたがって計算処理が並列実行される方式を指します。
  • 大容量ストレージ: Hadoopフレームワークでは、データをブロックに分割し、低コストな汎用ハードウェアのクラスター(集団)上に蓄えることにより、膨大な量のデータを保管できます。
  • 高速処理: Hadoopは、緊密に接続された低コストのコンピューターのクラスター全体にまたがって大量のデータを並列で処理し、短時間で結果を出します。

数値データや構造化データに限らずあらゆる種類のデータを保管・処理できる高性能が低価格で入手できるようになったことから、あらゆる規模の企業や組織が、Hadoopを活用して優位性を築いてきたWeb界の巨大企業(Google, Yahoo、Etsy、eBay、Twitterなど)を手本にするようになっています。そしてこう尋ねます。「Hadoopは私に何をしてくれるのですか?」

Big Data Insights

ビッグデータ

記事、調査、その他の注目トピックなどで、ビッグデータに関する洞察を深めていただけます。

Hadoopが現在に至るまで

1900年代の終わりごろから2000年代初めにかけて、World Wide Webが目もくらむような速さで成長するのに伴い、テキストで構成されたコンテンツの中から目的の情報を見つける手段として、検索エンジンとインデックスが生み出されました。初期の数年間、検索結果を送り返していたのは人間でした。これは本当です! しかし、Webページの数が数十単位から数百万単位へと激増していく中で自動化が求められるようになり、Webページを自動的に「這い回って」情報を集めるプログラムである「Webクローラー」(多くが大学主導の調査研究プロジェクトによるものでした)が作られたほか、Yahoo、AltaVistaといった検索エンジンの新興企業が事業を創始しました。

このようなプロジェクトの1つに、Nutchがありました。これはオープンソースのWeb検索エンジンで、ダグ・カッティング(Doug Cutting)氏とマイク・カファレラ(Mike Cafarella)氏の考案によるものです。彼らの目標は、Webの検索結果をより速く送り返す方法を発明することでしたが、そのために思い付いたのが、データを分割して複数のコンピューターで計算を行い、複数のタスクを同時に遂行する方法でした。また、この時期には、Googleと呼ばれる別の検索エンジン・プロジェクトも進行していました。Googleも基本コンセプトは同じで、より的確な検索結果を迅速に送り返すために、分散型の自動化された方法でデータを保管・処理することを目指していました。

2006年、カッティング氏はYahoo社に入り、Nutchプロジェクトと、Googleの自動化された分散データストレージ/処理に関する初期の仕事から得たアイデアを持ち込みました。これを受けてNutchプロジェクトは分割され、Webクローラーの部分がNutchとして残されました。そして分散コンピューティング/処理の部分がHadoopになったのです(この名前は、カッティング氏のご子息が持っていたおもちゃの象にちなんでいます)。2008年、Yahoo社はHadoopをオープンソースのプロジェクトとして公開しました。そして今現在、Hadoopのフレームワークとそのテクノロジー・ファミリーは、非営利のApache Software Foundation(ASF)によって管理・保守されています。ASFは、ソフトウェア開発者と貢献者の世界的なコミュニティです。

Hadoopが重要な理由

その発端以来、Hadoopは最もよく話題に上るテクノロジーのひとつとなっています。なぜでしょう? 最大の理由の1つは、その発明の目的でもあった、あらゆる種類の大量データを高速に処理する能力です。データの量と多様性が、とりわけソーシャルメディアと自動センサーに由来するデータが日ごとに増していく中で、この能力が多くの企業/組織にとって重要な検討事項となっているのです。他にも次のような理由があります。

  • 低コスト: このオープンソースのフレームワークは無料であり、しかも安価な汎用ハードウェアを用いて大量のデータを保管できます。
  • コンピューティング性能: この分散コンピューティング・モデルでは、超大量のデータを高速に処理できます。使用するコンピューティング・ノードが増えるほど、処理能力が向上していきます。
  • スケーラビリティ(規模の拡張性): 単純にノードを追加していくだけで、システムの規模を簡単に拡張できます。管理作業はほとんど必要ありません。
  • ストレージの柔軟性: 従来型のリレーショナル・データベースとは異なり、データを前処理してから保管する必要がありません。テキスト、画像、動画といった非構造化データも含めることができます。好きなだけデータを保管でき、どのように使うかは後から決めることができます。
  • データ保護と自己回復の機能を最初から内蔵: データとアプリケーションの処理は、ハードウェアの障害から保護されます。ノードがダウンするとジョブは自動的に別のノードにリダイレクトされ、分散コンピューティングが決して停止しないようになっています。また、全データについて、複数のコピーが自動的に保管されます。

Hadoopのコンポーネント

Hadoopのコンポーネントには、どれも面白い名前が付いています。これについては、そもそもHadoopという名前も、考案者の息子が黄色いおもちゃの象を持っていて、その象の名前が「Hadoop」だったことに由来していると知れば納得できるでしょう。以下に挙げる名前も、どこかで耳にしたことがあるもしれません。現在、Apache Software Foundationからの基本的なダウンロードには、次の3つの中核的なコンポーネントが含まれています。

  • HDFS – Javaベースの分散ファイルシステムです。あらゆる種類のデータを、事前に体系化することなく保管できます。
  • MapReduce – 大規模データセットを並列で処理するためのソフトウェア・プログラミング・モデルです。
  • YARN – 分散アプリケーションからのリソース要求をスケジューリングおよび処理するためのリソース管理フレームワークです。

Apacheのトップレベル・プロジェクト・ステータスに達し、利用可能になっているその他のコンポーネントには、以下のようなものがあります。

  • Pig – HDFSに保管されたデータの操作を行うためのプラットフォーム。MapReduceプログラムのコンパイラと、Pig Latinという高水準の言語で構成されます。MapReduceプログラムを記述しなくても、データの抽出、変換、読み込み、および基本的な分析を行うことができます。
  • Hive – データウェアハウス構築環境とデータをテーブル形式で提示するSQL風のクエリー言語。Hiveのプログラミングは、データベースのプログラミングとよく似ています(もともとはFacebook社で開発されました)。
  • HBase – Hadoop上で動作する非リレーショナル型の分散データベース。HBaseテーブルは、MapReduceジョブの入出力としても機能します。
  • Zookeeper – 分散プロセスを連携させるアプリケーション。
  • Ambari – Hadoopのサービスとコンポーネントの管理、設定、テストを行うためのWebインターフェイス。
  • Flume – 大量のストリーミング・データを収集および集計し、HDFSに受け渡すソフトウェア。
  • Sqoop – Hadoopとリレーショナル・データベースとの間でデータの受け渡しを行う、接続と転送のメカニズム。
  • Oozie – Hadoopのジョブ・スケジューラー。
  • Spark – 大規模データセットを並列で処理するためのフレームワーク。特定データセットへの繰り返しアクセスを高速にできるため、機械学習などで効果を発揮する。

以上に加え、商用のHadoopソフトウェア・ディストリビューションも増えています。最も有名な2社(ClouderaとHortonworks)は、このフレームワークの考案者たちが結成した新興企業です。Hadoopの領域に参入した企業は、他にもたくさんあります。ソフトウェア・ベンダーによるディストリビューションを利用する場合は、そのバージョンのフレームワークに対して料金を支払い、追加のソフトウェア・コンポーネント、ツール、トレーニング、文書、その他のサービスを受け取ります。

データはどのようにHadoopに取り込まれるか?

データをHadoopに取り込む方法は、いくつもあります。ここに挙げるのはそのほんの一部です。

  • 簡単なJavaコマンドでファイルをファイルシステムにロードすると、HDFSはデータブロックのコピーを複数作成し、各コピーをHadoopシステム上の複数のノードに分散して保管します。
  • ファイルの数が多い場合は、複数の「put」コマンドを並列して実行するシェルスクリプトを使うと、上記のプロセスを迅速化できます。MapReduceコードを記述する必要はありません。
  • ディレクトリをスキャンして新しいファイルを探し、ファイルが見つかったらHDFSに「put」するcronジョブを作成します。これは、定期的に電子メールをダウンロードする場合などに便利です。
  • HDFSをファイルシステムとしてマウントし、ファイルを単純にコピーするか、ファイルをそこへ書き込みます。
  • Sqoopを使って、構造化データをリレーショナル・データベースからHDFS、Hive、HBaseにインポートします。SqoopではHadoopからデータを抽出し、リレーショナル・データベースやデータウェアハウスにエクスポートすることもできます。
  • Flumeを使って、ログファイルからHadoopにデータを継続的にロードします。
  • サードパーティ製のコネクタ(SAS/ACCESS®など)を使います。

Hadoopを使って何ができるのか?

Hadoopのもともとの目標は、何百万あるいは何億というWebページを検索し、適切な結果を返すというものでしたが、現在では多くの企業/組織がHadoopを次世代のビッグデータ・プラットフォームとして見ています。今日における一般的な使用法には、例えば以下のようなものがあります。

  1. 低コストのストレージとアクティブなデータ・アーカイブ: 汎用ハードウェアは価格も手ごろで、ビッグデータの保管と統合にうってつけです。対象となるデータには、トランザクション、ソーシャルメディア、センサー、マシン、科学データ、クリック・ストリームなどがあります。低コストのストレージを利用することで、現時点ではそれほど重要でないものの後日ビジネス・アナリティクスに役立つ可能性のある情報も保持しておくことができます。
  2. データウェアハウスとアナリティクス・ストアのためのステージング(中間準備)領域: 最も一般的な利用法のひとつは、高度なアナリティクス、クエリー、レポーティングなどを実行する準備として、エンタープライズ・データウェアハウス(EDW)または分析ストアにロードする大量の生データをステージングすることです。企業/組織は新しいタイプのデータ(非構造化データなど)を処理したり、一部の履歴データの負荷をEDWから解放したりする手段として、Hadoopに注目しています。
  3. データレイク(データの湖): この場合の「湖」は、とにかく最初にデータを一ヶ所にまとめることを意味しています。Hadoopは、SQLの世界のようなスキーマによる制約を受けずに大量のデータを保管できるので、この目的でよく使われます。この場合のHadoopは、独自開発または商用のデータ管理テクノロジーを用いたETL(抽出/変換/ロード)ジョブやデータ品質管理ジョブの並列処理に対応した、低コストのコンピューティング・プラットフォームとして利用されていることになります。改良された結果は必要に応じて、他のシステム(EDWや分析マートなど)に渡すことができます。
  4. 発見と分析のためのサンドボックス(砂場=自由な実験の場): Hadoopは、さまざまな形態・形式の大規模なデータを取り扱えるように設計されているため、アナリティクスにも適しています。Hadoop上でのビッグデータ・アナリティクスは、業務効率の向上、新たな機会の発掘、競争優位性のさらなる強化などの目的に役立つでしょう。サンドボックスをセットアップすることで、革新を実現する迅速かつ完璧なチャンスを、最小限の投資で手にすることができます。

Hadoopは間違いなく、大量の多様なデータを保管・処理するための経済性に優れたプラットフォームです。そして必然的な次のステップは、そうした多様なデータを適切に変換・管理し、アナリティクスを駆使して未知の知見・洞察を導き出すことです。

念頭に置くべきいくつかの課題

まず第一に、MapReduceはどんな問題にも申し分なく対応できるわけではありません。独立した複数のユニットに分割できるような情報や課題に対する単純なリクエストなら、うまく処理します。しかし、反復的な対話操作型の分析タスクを効率的に行うことはできません。MapReduceの処理はファイル中心型だからです。各ノードはソートとシャッフル以外で互いに通信し合うことがないため、反復アルゴリズムを完了させるためには複数のmap-shuffle/sort-reduceフェーズが必要になります。その結果、MapReduceのフェーズ間に複数のファイルが作成されますが、これは高度な分析コンピューティングとしては効率が悪すぎます。

第二の問題として挙げられるのは、人材のギャップです。このテクノロジーは比較的新しいため、MapReduceを生産的に使いこなすのに十分なJavaスキルを持つ入門レベルのプログラマーを見つけるのが困難なのです。この人材ギャップは、ディストリビュージョンのプロバイダーが競い合ってリレーショナル(SQL)テクノロジーをHadoop上に載せようとしている理由の1つとなっています。実際、SQLのスキルを持つプログラマーを見つける方が、MapReduceのスキルを持つプログラマーを見つけるよりもはるかに簡単です。また、Hadoopの管理はアートの側面とサイエンスの側面を併せ持つため、オペレーティング・システム、ハードウェア、Hadoopのカーネル設定に対する深い知識が必要です。

その他の課題としては、断片化されたデータ・セキュリティをめぐるものが挙げられます(新しいツールやテクノロジーが現れてきてはいますが)。またHadoopには、データの管理、クレンジング、ガバナンス、メタデータ管理のための使いやすく機能豊富なツール群が用意されていません。中でも特に欠けているのが、データの品質と標準化に関するツールです。

ビッグデータ+Hadoop+SAS

SASは「ユーザーがより多くの知識をより迅速に獲得して、より良い意思決定を行えるように支援する」という唯一の目標を中心に据え、Hadoopを含むビッグデータ導入サポートを提供しています。このテクノロジーをどのように利用するかにかかわらず、すべてのプロジェクトは反復的で継続的な改善サイクルに沿って進めなければなりません。このサイクルには、データ準備、データ管理、データ・ビジュアライゼーション(視覚化)とデータ探索、モデル開発、モデル展開、モニタリングが含まれます。

SASはこの(データから意思決定までの)アナリティクス・ライフサイクル全体をカバーしており、それぞれの段階に応じた機能を提供しています。データ集計から強力なアナリティクスまで、さまざまな手法を駆使して知見・洞察を導き出し、ビッグなHadoopデータをビッグなチャンスへと変えることができます。

SASはストレージではなくアナリティクスが本業であるため、ハードウェアやデータベースのベンダー選択については柔軟なアプローチを採用しています。お客様との共同作業を通して、テクノロジーの適切な組み合わせを導入できるようサポートします。例えば、Hadoopを他のデータウェアハウス・テクノロジーと組み合わせて導入することも可能です。

また、どのようなプロジェクトも、成功はそれがもたらす価値によって決まる、ということを忘れてはなりません。収益源、利益率、リスク軽減、プロセス改善に関する指標を設定し、その結果を周知することで、小規模のパイロット・プロジェクトの成果が広く認められ、他の部門の関心を引くことができるでしょう。多くの企業や組織は、1つか2つのHadoopプロジェクトから開始する方法を探りながら、将来の拡大計画も同時に検討しています。

Back to Top