Hadoopとは?

Hadoopは、Javaベースのオープンソースフレームワークであり、ビッグデータの格納と処理に使用されます。データは、クラスターとして動作する安価な汎用サーバーに格納されます。分散ファイルシステムにより、同時処理とフォールトトレランスが実現します。Doug Cutting氏とMichael J. Cafarella氏によって開発されたHadoopは、MapReduceプログラミングモデルを使用して、ノードからのデータの格納と検索を高速で実行します。このフレームワークはApache Software Foundationによって管理され、Apache License 2.0の下でライセンスされます。

長年にわたり、アプリケーションサーバーの処理能力が大きく向上する一方で、データベースは容量と速度の制約によって後れをとっていました。しかし現在、多くのアプリケーションから生成されるビッグデータを処理するため、データベースの領域で必要とされているイノベーションを提供するという重要な役割を、Hadoopが果たしています。

Download Hadoop and Data Lakes now.
今すぐダウンロード

ビジネスの観点からも、直接的および間接的なメリットがあります。多くの場合にクラウド(オンプレミスの場合もあります)の安価なサーバーでオープンソーステクノロジーを使用することで、企業は大幅なコスト削減を実現できます。

さらに、大量のデータを収集する能力と、データ処理の結果として得られる知見によって、実際のビジネスの意思決定(適切な消費者セグメントに注力する、誤ったプロセスを排除/修正する、現場の業務を最適化する、関連度の高い検索結果を提供する、予測アナリティクスを実行するなど)が向上します。

従来のデータベースと比較したときのHadoopのメリット

Hadoopは従来のデータベースが抱える2つの大きな問題を解決します。

1. 容量:Hadoopは大量のデータを格納します。

HDFS(Hadoop Distributed File System)と呼ばれる分散ファイルシステムを使用することにより、データはチャンクに分割され、汎用サーバーのクラスターにわたって保存されます。これらの汎用サーバーは単純なハードウェア構成により構築されているので、データが増加すれば低コストで簡単に拡張できます。

2. スピード:Hadoopはデータの格納/取得をより高速で実行します。

Hadoopは、MapReduce関数プログラミングモデルを使用して、データセット全体で並列処理を実行します。したがって、クエリをデータベースに送信すると、データを順番に処理するのではなく、タスクが分割され、分散サーバーで同時に実行されます。最後に、すべてのタスクの出力が照合され、アプリケーションに返されるので、処理速度が大幅に向上します。

ビッグデータでHadoopを使用することの5つのメリット

ビッグデータとアナリティクスにおけるHadoopの貢献は重要です。人、プロセス、オブジェクト、ツールなどに関するデータを収集しても、より良い意思決定をもたらす有意義なパターンを導き出さなければ役に立ちません。Hadoopは、そのようなビッグデータの課題を克服するのに役立ちます。

  1. 回復力 - 1つのノードに格納されたデータは、クラスター内のほかのノードにも複製されます。これによりフォールトトレランスが実現します。1つのノードが停止しても、利用可能なデータのバックアップがクラスター内に常に存在します。
  2. スケーラビリティ - データストレージに制限がある従来のシステムとは異なり、Hadoopは分散環境で動作するため高いスケーラビリティを持ちます。必要に応じて、セットアップを簡単に拡張して、ペタバイト規模のデータを格納可能なサーバーを追加できます。
  3. 低コスト - Hadoopはオープンソースのフレームワークであり、ライセンスを購入する必要がないため、リレーショナルデータベースシステムに比べて大幅にコストが低くなります。安価な汎用ハードウェアを使用することは、ソリューションを経済的に維持するうえでも有利です。
  4. 高速 - Hadoopの分散ファイルシステム、並行処理、MapReduceモデルにより、複雑なクエリを数秒で実行できます。
  5. データの多様性 - HDFSには、非構造化データ(動画など)、半構造化データ(XMLファイルなど)、構造化データといった多様なデータ形式を格納する機能があります。データを格納する際に、定義済みのスキーマに対して検証する必要はありません。むしろ、ダンプするデータの形式は不問です。後で、取り出されたデータが解析され、ニーズに応じて任意のスキーマに適合されます。これにより、同じデータを使用して異なる知見を得るという柔軟性が得られます。

Watch TDWI: Governing Big Data and Hadoop now.
今すぐ見る

Hadoopのエコシステム:主要コンポーネント

Hadoopは単なるアプリケーションではなく、分散データの格納と処理を可能にするさまざまな統合コンポーネントを備えたプラットフォームです。これらのコンポーネントの組み合わせによって、Hadoopエコシステムが形成されます。

一部はフレームワークの基盤を形成する主要コンポーネントであり、その他はHadoopの領域で機能を追加する補助的なコンポーネントです。

Hadoopの主要コンポーネントは次のとおりです。

HDFS:分散ファイルシステムの管理

分散ファイルシステムを維持するHDFSは、Hadoopの支柱であり、これによって複数サーバーへのデータの格納と複製が可能になります。

HDFSにはNameNodeとDataNodeがあります。DataNodeは、データが実際に格納される汎用サーバーです。一方、NameNodeには、異なるノードに格納されたデータに関する情報を持つメタデータが格納されます。アプリケーションはNameNodeとのみ通信し、NameNodeが必要に応じてDataNodeと通信します。

YARN(Yet Another Resource Negotiator)

Yet Another Resource Negotiator、略してYARNは、リソースの管理とスケジュールを担い、各データノードで何が起こるべきかを決定します。すべての処理要求を管理する中央マスターノードは、リソースマネージャーと呼ばれます。リソースマネージャーはノードマネージャーと対話します。すべてのスレーブデータノードには、タスクを実行する独自のノードマネージャーが含まれます。

MapReduce

MapReduceは、検索のインデックス化のためにGoogleが最初に使用したプログラミングモデルです。データを小さなセットに分割するために使用されるロジックであり、データを高速かつ効率的に解析するMap()とReduce()という2つの関数に基づいて動作します。

まず、Map関数が複数のデータセットを並行してグループ化、フィルタリング、ソートして、タプル(キーと値のペア)を生成します。次に、Reduce関数がタプルからデータを集約して、目的の出力を生成します。

Hadoopのエコシステム:補足コンポーネント

以下は、Hadoopのエコシステムで広く使用されている補足コンポーネントです。

Hive:データウェアハウジング

Hiveは、HDFSで大規模なデータセットのクエリを実行するのに役立つデータウェアハウジングシステムです。Hiveが登場する前は、Hadoopデータのクエリのために複雑なMapReduceジョブを作成することが開発者の課題となっていました。Hiveが使用するHQL(Hive Query Language)は、SQLの構文に似ています。ほとんどの開発者はSQLの使用経験があるので、Hiveを簡単に使用し始めることができます。

Hiveのメリットは、JDBC/ODBCドライバーがアプリケーションとHDFSのインターフェイスとして機能する点です。これによって、Hadoopファイルシステムがテーブルとして示され、HQLとMapReduceジョブの双方向の変換が可能になります。したがって、開発者とデータベース管理者は、大量のデータセットをバッチ処理できるとともに、その処理のために単純で使い慣れたクエリを使用できます。Facebookチームが最初に開発したHiveは、現在はオープンソーステクノロジーとなっています。

Pig:MapReduceの関数を削減

最初にYahoo!が開発したPigは、HDFSのクエリを実行するためのMapReduce関数を作成する必要性を排除するという点では、Hiveに似ています。HQLと同様に、ここで使用される「Pig Latin」という言語はSQLに近いものです。「Pig Latin」は、MapReduceの上位に位置する高次データフロー言語レイヤーです。

Pigには、HDFSとのインターフェイスを提供するランタイム環境もあります。JavaやPythonなどの言語のスクリプトもPigに埋め込むことができます。

HiveとPigの比較

PigとHiveは同様の関数を使用しますが、どちらが効果的かはシナリオによって異なります。

Pigは複雑な結合やクエリを簡単に実行できるため、データプレパレーション段階で役立ちます。また、半構造化や非構造化などのさまざまなデータ形式の処理に優れています。Pig LatinはSQLに近い言語ですが、SQLとの相違もかなりあるため、習得には相当の時間を要します。

一方、Hiveは構造化されたデータの処理に優れているため、データウェアハウジングでより効果的です。これは、クラスターのサーバー側で使用されます。

研究者やプログラマーは、クラスターのクライアント側でPigを使用する傾向があります。また、データアナリストなどのビジネスインテリジェンスユーザーにはHiveが適しています。

Flume:ビッグデータの取り込み

Flumeは、複数のデータソースとHDFSの間の配送サービスとして機能するビッグデータ取り込みツールです。ソーシャルメディアサイト、IoTアプリケーション、eコマースポータルなどのアプリケーションによって生成された膨大なストリーミングデータ(ログファイル、イベントなど)を収集して集約し、HDFSに送ります。

Flumeは次のような豊富な機能を備えています。

  • 分散アーキテクチャーを使用します。
  • 信頼性の高いデータ転送を保証します。
  • フォールトトレラントです。
  • バッチまたはリアルタイムでデータを収集する柔軟性があります。
  • 必要に応じて、より多くのトラフィックを処理するために水平方向にスケーリングできます。

データソースはFlumeエージェントと通信します。各エージェントはソース、チャネル、シンクを持ちます。ソースが送信元からデータを収集し、チャネルがデータを一時的に格納し、最後にシンクがデータを送信先(Hadoopサーバー)に転送します。

Sqoop:リレーショナルデータベース向けのデータ取り込み

Sqoop(Hadoopにとっての「SQL」)も、Flumeのようなデータ取り込みツールです。Flumeは非構造化データまたは半構造化データに使用されますが、Sqoopはリレーショナルデータベースとの間のデータのエクスポートとインポートに使用されます。ほとんどのエンタープライズデータはリレーショナルデータベースに格納されているため、Sqoopを使用してデータをHadoopにインポートすることで、アナリストが調査できます。

データベース管理者と開発者は、単純なコマンドラインインターフェイスを使用してデータをエクスポート/インポートできます。SqoopはこれらのコマンドをMapReduce形式に変換し、YARNを使用してHDFSに送信します。Sqoopはフォールトトレラントでもあり、Flumeのように並行処理を実行します。

Zookeeper:分散アプリケーションの調整

Zookeeperは、分散アプリケーションを調整するサービスです。Hadoopフレームワークでは、管理対象の分散サーバーのクラスターに関する情報を持つ集中レジストリを持つ管理ツールとしての役割を担い、次のような主要機能を持ちます。

  • 構成情報(構成データの共有状態)の維持
  • ネーミングサービス(各サーバーへの名前の割り当て)
  • 同期サービス(デッドロック、競合状態、データの競合を処理)
  • リーダー選挙(コンセンサスを通じてサーバーの中からリーダーを選出)

Zookeeperサービスが実行されるサーバーのクラスターは、「アンサンブル」と呼ばれます。アンサンブルはグループ内のリーダーを選出し、残りのサーバーはフォロワーとして動作します。クライアントからのすべての書き込み操作はリーダーを介してルーティングされる必要がありますが、読み取り操作は任意のサーバーに直接実行できます。

Zookeeperは、フェイルセーフの同期、原子性、メッセージのシリアライゼーションによる高い信頼性と回復力を提供します。

Kafka:より高速のデータ転送

Kafkaは、パブリッシュ/サブスクライブ型の分散メッセージングシステムであり、データ転送の高速化のためにHadoopでよく使用されます。Kafkaクラスターは、プロデューサーとコンシューマーの間における仲介役を担うサーバーのグループで構成されます。

ビッグデータにおけるプロデューサーとは、たとえば温度データを収集してサーバーにリレーバックするセンサーを指します。コンシューマーはHadoopサーバーです。プロデューサーはトピックに関するメッセージをパブリッシュし、コンシューマーはトピックをリッスンしてメッセージを取得します。

単一のトピックは、さらにパーティションに分割できます。同じキーを持つすべてのメッセージは、特定のパーティションに到達します。コンシューマーは、1つまたは複数のパーティションをリッスンできます。

メッセージを1つのキーの下にグループ化し、コンシューマーを特定のパーティションに対応させることで、多くのコンシューマーは同じトピックを同時にリッスンできます。このように、トピックが並列化され、システムのスループットが向上します。Kafkaは、スピード、スケーラビリティ、堅牢なレプリケーションのメリットがあることから、広く採用されています。

HBase:非リレーショナルデータベース

HBaseは、HDFSの最上位に位置する列指向の非リレーショナルデータベースです。HDFSの課題の1つは、バッチ処理のみしか実行できないことです。このため、単純なインタラクティブクエリでもデータをバッチ処理しなければならず、レイテンシーが大きくなります。

HBaseは、巨大なテーブルにわたる単一行のクエリを、レイテンシーを小さく抑えて実行可能にすることで、この課題を解決しています。そのために、内部的にハッシュテーブルが使用されます。Google BigTableのラインに沿ってモデル化されており、Google File System(GFS)にアクセスするうえで役立ちます。

HBaseはスケーラビリティが高く、ノードが停止したときの障害のサポート機能を持ちます。また、半構造化データとともに非構造化データにも対応します。このため、分析目的でビッグデータストアのクエリを実行する場合に最適です。

Download O’Reilly Report: Moving Hadoop to the Cloud now.
今すぐダウンロード

Hadoopの課題

Hadoopはビッグデータ活用を実現する重要な役割を担うものとして広く認識されていますが、検討すべき課題もまだ残っています。これらの課題は、その複雑なエコシステムの特性と、Hadoop関数を実行するための高度な技術的知識の必要性に起因しています。しかし、適切な統合プラットフォームとツールを使用することで、複雑性が大幅に軽減され、使用しやすくなります。

1. 習熟に時間がかかる

Hadoopファイルシステムのクエリのためには、プログラマーはMapReduce関数をJavaで記述する必要があります。これは単純な作業ではなく、習熟が困難です。また、エコシステムを構成する要素が非常に多いため、それらに精通するまでに時間がかかります。

2. データセットに応じて必要なアプローチが異なる

Hadoopでは、「多目的に利用可能」なソリューションはありません。上記の補足的な構成要素のほとんどは、「隙間」を埋めるために構築されたものです。

たとえば、HiveとPigはデータセットのクエリを実行するために簡単に使用できます。また、FlumeやSqoopなどのデータ取り込みツールは、複数のソースからデータを収集するのに役立ちます。他にも多くのコンポーネントがあり、正しい選択をするには経験を積む必要があります。

3. MapReduceの限界

MapReduceは、ビッグデータセットのバッチ処理のための優れたプログラミングモデルですが、限界もあります。

複数の読み取りと書き込みを行うファイル集約型のアプローチは、リアルタイムのインタラクティブなデータアナリティクスや反復タスクには適していません。そのような操作の場合、MapReduceは効率的ではなく、レイテンシーが大きくなります(この問題については複数の回避策があります。ApacheはMapReduceのギャップを埋める代替手段です)。

4. データセキュリティ

ビッグデータがクラウドに移行すると、機密データがHadoopサーバーにダンプされるため、データセキュリティを確保する必要が生じます。膨大なエコシステムには非常に多くのツールがあり、各ツールにデータに対する正しいアクセス権があることを確認することが重要です。適切な認証、プロビジョニング、データ暗号化、頻繁な監査が必要です。Hadoopにはこの課題に対処する能力がありますが、問題となるのは専門知識を持ち、実行に細心の注意を払うことです。

ここで説明したHadoopのコンポーネントは多くの大手IT企業が使用していますが、業界ではまだ比較的新しいものです。問題のほとんどは、この未成熟状態に起因します。しかし、堅牢なビッグデータ統合プラットフォームを使用することで、これらの問題をすべて解決または緩和できます。企業が使用していますが、業界ではまだ比較的新しいものであり、この未成熟状態に起因する問題がほとんどです。堅牢なビッグデータ統合プラットフォームを使用することで、これらすべての問題を解決または緩和できます。

HadoopとApache Spark

MapReduceモデルには多くの利点がありますが、処理の各段階間のディスク書き込みに依存するため、インタラクティブなクエリやリアルタイムのデータ処理では効率的ではありません。

Sparkは、メモリ内データストレージを使用してこの課題を解決するデータ処理エンジンです。Hadoopのサブプロジェクトとして開始されましたが、独自のクラスターテクノロジーを使用します。

多くの場合、SparkはHDFSの上で使用され、Hadoopのストレージ機能だけを活用します。処理アルゴリズムについては、SQLクエリ、ストリーミング、機械学習、グラフをサポートする独自のライブラリを使用します。

データサイエンティストが幅広く使用しているSparkは、高速かつ簡潔で機能豊富なAPIを備え、これによって大規模なデータセットの使用が容易になります。

SparkはHadoopよりも優れているように思われるかもしれませんが、両方を連携させることが可能です。データセットの要件とタイプに応じて、HadoopとSparkは互いに補完し合います。Sparkには独自のファイルシステムがないため、HDFSなどのソリューションにストレージを依存する必要があります。

実際の比較は、Sparkの処理ロジックとMapReduceモデルの比較となります。RAMが制約条件となる場合、夜間バッチのジョブについてはMapReduceが最適です。しかし、データのストリーミング、機械学習ライブラリへのアクセス、リアルタイムの迅速な操作については、Sparkが理想的な選択肢となります。

将来の多くの可能性

わずか10年で、データアナリティクスの可能性を現実のものにしたHadoopは、コンピューティング業界に大きな影響を及ぼす存在になりました。サイト訪問者の分析、詐欺の検出、銀行業務アプリケーションなど、多様な処理に適用できます。

Talend Open Studio for Big Dataを使用すると、Hadoopのセットアップを任意のデータアーキテクチャーに簡単に統合できます。Talendは、ほかのデータ管理ソリューションよりも多くの組み込みデータコネクターを提供します。これにより、主要なファイル形式(CSV、XML、Excelなど)、データベースシステム(Oracle、SQLServer、MySQLなど)、パッケージ化されたエンタープライズアプリケーション(SAP、SugarCRMなど)、さらにはSalesforceやForce.comなどのクラウドデータサービスとHadoopとの間で、シームレスなデータフローを構築できます。

Talendのビッグデータソリューションの詳細をご覧いただくか、または今すぐTalend Open Studio for Big Dataをダウンロードして、オープンソースビッグデータツールのメリットを実現してください。

| 最終更新日時: January 28th, 2019