Hadoopエコシステムの基本:パート1 ― ビッグデータと主要コンポーネントを徹底解説
本記事は、Tricoreが2017年7月10日に公開した記事をもとにしています。
Apache™ Hadoop®は、分散コンピューティング環境で大量のデータを処理するために設計された、Javaベースのオープンソースフレームワークです。Doug Cutting氏とMike Cafarella氏によって開発され、2005年にリリースされました。
Hadoopは汎用(コモディティ)ハードウェア上で動作するよう構築されており、「ハードウェア障害は頻繁に発生するもの」という前提のもとで設計されています。Hadoopフレームワークは、こうした障害に対処する仕組みを備えています。
この2部構成のシリーズのパート1では、ビッグデータ、Hadoopエコシステム、そしてHadoopフレームワークの主要コンポーネントについて解説します。
データはかつてないほど巨大化している
データはあらゆる組織にとって重要な資産であり、ビッグデータは貴重なビジネスインサイトにつながる新たな分析の機会を切り開いています。ビッグデータとは、組織のストレージ容量や処理能力の範囲を超えるデータを指します。
ビッグデータの発生源は多岐にわたります。ソーシャルネットワーク、防犯カメラ(CCTV)、センサー、オンラインショッピングポータル、宿泊業界のデータ、GPS(全地球測位システム)、自動車産業など、膨大な情報を生成するさまざまなソースから生まれます。
ビッグデータには3つの主要な側面があり、いずれも驚異的なスピードで進化し続けています。
Volume(量):ビッグデータの容量は、ギガバイトからテラバイト、ペタバイトへと急速に拡大しています。保存には膨大なディスク容量が必要です。
Velocity(速度):ビッグデータは通常データセンターに保存されます。ローカルのワークステーションへデータを配信するには、高速なデータプロセッサが必要です。
Variety(多様性):データは大きく分けて、構造化データ、非構造化データ、半構造化データに分類できます。
ビッグデータは次の式で表すことができます。
ビッグデータ = データの(Volume+Velocity+Variety)
Hadoopエコシステムとは
Hadoopエコシステムとは、Apache Hadoopソフトウェアライブラリを構成するさまざまなコンポーネントの総称です。このエコシステムは、相互に連携する複数のモジュール群で構成されており、ビッグデータ処理特有の要件に対応するためのツールや付帯機能を提供します。エコシステムには、後述するHadoopフレームワークのコアコンポーネントに加え、アドオンモジュールを含むすべてのHadoopモジュールが含まれます。
Hadoopフレームワークの構成要素
Hadoopフレームワークには、以下のコアコンポーネントが含まれます。
分散ストレージ
Hadoopにおける分散ストレージは、複数の要素が組み合わさって実現されています。
Hadoop Distributed File System(HDFS)
Hadoopでは、分散ストレージは「Hadoop Distributed File System(HDFS)」と呼ばれます。HDFSは冗長性のあるストレージを提供し、以下のような特徴を持ちます。
汎用ハードウェア上にデータを確実に保存できるよう設計されている。
ハードウェア障害を前提として構築されている。
大きなファイルとバッチ挿入向けに作られている(一度書き込み、何度も読み出す方式)。
HBase
HBaseは、分散型のカラム指向NoSQLデータベースです。HBaseは基盤ストレージとしてHDFSを使用し、MapReduceによるバッチ処理とポイントクエリ(ランダム読み取り)の両方をサポートします。
HBaseはさらに、以下のようなタスクを実行します。
汎用ハードウェアのクラスタ上に大量のデータ(最大数十億行)を保存する。
ログ、ドキュメント、リアルタイムのアクティビティフィード、インポートされた生データを一括保存する。
Hadoopアプリケーションが利用するデータへの読み書きを一貫して実行する。
MapReduce機能を使ったデータストアの集計や処理を可能にする。
分析や機械学習のためのデータプラットフォームを提供する。
HCatalog
HCatalogは、Hadoop向けのテーブルおよびストレージ管理レイヤーです。Pig™、MapReduce、Hive™などのHadoopアプリケーションが、ファイル単位ではなく表形式でデータを読み書きできるようにします。
また、以下の機能も提供します。
Hadoopアプリケーションが使用するデータを格納する一元化された場所。
順次実行・反復実行されるHadoopプロセス向けの再利用可能なデータストア。
リレーショナルな抽象化によるデータ保存。
メタデータ管理。
分散処理
Hadoopは、MapReduceとYARN(Yet Another Resource Negotiator)によって分散処理を実現しています。
MapReduce
MapReduceは、多数の汎用マシンのクラスタ上で動作する分散データ処理モデルおよび実行環境です。保存したデータからインサイトを導き出すことを可能にし、すべての操作をMap関数またはReduce関数に分解するMapReduceアルゴリズムを使用します。
MapReduceには以下のような利点があります。
大規模かつ多様なデータセットに対する集約(カウント、ソート、フィルタリング)。
MapタスクおよびReduceタスクのスケーラブルな並列実行。
タスクの分散実行。
YARN
YARNは、Apache Hadoopエコシステムにおけるクラスタおよびリソース管理レイヤーです。第2世代のHadoopフレームワークにおける主要機能の一つです。
YARNは以下の機能を提供します。
アプリケーションをスケジューリングしてタスクの優先順位を付け、ビッグデータ分析システムを維持する。
より大きなアーキテクチャの一部として、データを集約・整理し、データ取得のための特定のクエリを実行する。
特定のアプリケーションへのリソース割り当てを支援し、その他のリソース監視タスクを管理する。
機械学習
Hadoopは、Apache Mahoutを通じて機械学習をサポートしています。Mahoutは、スケーラブルな機械学習アルゴリズムを作成することを主目的としたオープンソースプロジェクトです。Mahoutはデータマイニングフレームワークであり、通常はHadoopインフラストラクチャを基盤として動作し、膨大なデータ量を管理します。
Mahoutには以下のような機能があります。
大量のデータに対してデータマイニングタスクを実行するための、すぐに使えるフレームワーク。
Hadoop上に実装されたアルゴリズムにより、分散環境で高いパフォーマンスを発揮。
大規模データセットの迅速な分析。
進化的プログラミングのための分散適応度関数機能。行列ライブラリやベクトルライブラリも含まれる。
ワークフローの監視とスケジューリング
Oozieは、Hadoopのジョブ管理システムです。このワークフロースケジューラは、依存関係のあるジョブのワークフローを実行します。ユーザーは、Hadoop上で並列ジョブと逐次ジョブを実行するワークフローの有向非巡回グラフ(DAG)を作成できます。
Oozieは非常に柔軟で、ジョブの開始、停止、一時停止、再実行を簡単に行えます。失敗したワークフローの再実行も容易です。
またOozieはスケーラブルであり、Hadoopクラスタ内で数千のワークフロー(それぞれ数十のジョブで構成)をタイムリーに実行・管理できます。
スクリプティング
開発者は、Apache Pigを使ってHadoopでのスクリプティングを行えます。PigはSQLベースの言語と実行環境を提供し、複雑なMapReduce変換を作成できます。Pigは「Pig Latin」というコーディング言語で記述されますが、実行可能なMapReduceジョブに変換されます。また、Javaを使って拡張関数やユーザー定義関数(UDF)を作成することも可能です。
Pigはさらに、以下の機能を提供します。
HDFS上の生データに対してETL(抽出・変換・ロード)タスクや手順を実行するスクリプティング環境。
複雑なMapReduce関数を作成・実行するためのSQLベースの言語。
大規模かつ多様なデータセットに対するデータ処理、結合、スキーマ定義。
高水準のデータフロー言語。
データ処理に集中できる抽象化レイヤー。
まとめ
HadoopとMapReduceフレームワークは、バイオインフォマティクスのコミュニティ、特に次世代シーケンシング解析の分野ですでに多くのユーザーベースを持っています。この分野で人気があるのは、堅牢でフォールトトレラントなHDFSの存在が一因です。
HBaseは、HDFSファイルシステムの上に構築された、分散型でフォールトトレラントかつスケーラブルなデータベースを提供し、データへのランダムなリアルタイム読み書きアクセスを可能にします。また、スケーラブルな機械学習ライブラリの構築にはMahout、バッチデータ処理にはPigの活用も検討するとよいでしょう。
シリーズのパート2では、Hadoopエコシステムのさらなるコンポーネントについて解説します。
ご意見やご質問がある場合は、フィードバックタブをご利用ください。
-
ビッグデータ分析に最適なプログラミング言語7選【前編】
前回のビッグデータに関する記事では、ファンクショナルアーキテクチャの第8層にあたる「データ統合ツール」について解説しました。今回は、第9層を構成する「データ言語(Data Languages)」について詳しくご紹介します。 現在、ビッグデータプロジェクトは企業の規模を問わずあらゆる業界で一般的になっており、ビッグデータがもたらす洞察(インサイト)を最大限に活用しようとする動きが加速しています。どれほど高度でGUIベースのソフトウェアが開発されても、その根幹を支えているのはコンピュータプログラミングです。これまでのツール解説が、貴社のビッグデータ体制の計画立案に役立ったのであれば幸いです。しかし
-
ビッグデータ分析に最適なプログラミング言語 後編:Python、MATLAB、Scalaなど7選
前回の「データサイエンスに最適なプログラミング言語」第1回では、7つの言語をご紹介しました。これらは、ビッグデータを扱う多くの専門家が実際に使用している定番の言語です。今回は残りの半分をご紹介します。第1回で取り上げた言語と比べると比較的新しい言語が中心ですが、JavaやHadoop、R、SQLに匹敵する人気を獲得しているものもあれば、独自の優れた機能によって市場で確固たる地位を築いているものもあります。データサイエンス向けプログラミング言語リスト1. Python(パイソン)Pythonは、ビッグデータに必要な大規模かつ複雑なデータセットを扱うのに最適なオープンソースプログラミング言語の一つ