Apache Hadoop情報
Apache Hadoopとは
Hadoop(ハドゥープ)は大規模データの蓄積、分析を分散して処理するフレームワークであり、Java言語で実装されています。
Hadoopの元となったのはGoogleの大量のデータを効率的に処理するための分散処理基盤であるMapReduceとGoogle File Systemです。
Googleがこれらシステムに関する論文を2004年に公開し、それを参考にDoug Cutting氏、Mike Cafarella氏らにより開発されました。Hadoopという名前は、Doug氏の息子が、黄色い象のぬいぐるみに付けた名前から来ており、意味を持たず、簡単で、他で使われていないという理由により、採用されました。黄色い象はHadoopのマスコットキャラクターにもなっています。
Hadoopは分散処理基盤であることから、各処理をクラスタ内のマシンに振り分けて(Map)、各マシンで処理された結果を集約(Reduce)して最終的な結果を得ます。
近年、大量のデータ(Big Data)の中から目的のデータを抽出したり、保存されたデータからある傾向を読み取るといった、データマイニングへのニーズが高まっています。また、ただBig Dataを処理できるだけでなく、より短時間にそれらの情報を算出したいといった要求が発生してきています。
以前は、Big Dataを処理するにはデータウェアハウスなど専用の製品を使う必要がありました。Hadoopはこのようなデータ処理を、一般的なサーバマシンを複数つなげ合わせる(スケールアウト)ことで可能にします。
複数のサーバから構成されるHadoopシステムですが、複数台に分散していることがシステムの柔軟性を高めています。処理性能を向上させたい場合には、Hadoopクラスタにマシンを追加するだけ済みます。Hadoopクラスタシステムは一般的なサーバマシン群から構成できるため、ハードウェアの調達が容易です。また、ソフトウェア的にも、クラスタへ追加するサーバにHadoopシステムをインストール・設定するだけで、Hadoopクラスタをスケールアップできます。このような特徴から、ハードウェア、ソフトウェアの両面でスケーラビリティが高いといえます。
近年、クラウドサービスを使って簡単に複数台のサーバを立ち上げられるようになったことから、Hadoopを使ってデータ処理を行いたい時だけクラウド上にHadoopクラスタを構築できます。さらに、性能が不十分であればサーバを追加したり、リソースが余ってきたらサーバを減らし、一通りの処理が終了した時点でHadoopクラスタの全マシンを開放するなどといった使い方もできるため、これから益々利用されるシーンが増えてくると考えられます。
Hadoop 1系までは、MapReduceのみだった並列処理フレームワークですが、Hadoop 2系からはStorm、Spark、Tez/Impalaなどの他の並列処理フレームワークを利用できるようになりました。また、Hadoop上にあるデータへのMapReduce(Java)以外での処理インターフェースが増えました。例えばImpalaや、Tez上で動くHiveやPigによって、ユーザは使い慣れたSQLとほぼ同等なクエリを使ってデータへアクセスできます。さらに、StormやSparkではストリーミングによってリアルタイムデータの処理が可能となり、HDFS上に存在するデータ以外でもHadoopシステムを利用できるようになっています。
主な特徴
Hadoopは下記の4つのCoreモジュールから成り立っています。
- Hadoop Distributed File System (HDFS)
- Hadoop MapReduce
- Hadoop Common
- Hadoop YARN
また、以下の2つのHadoopプロジェクトより独立したモジュールが存在しています。
- Apache Ozone
- Apache Submarine
HDFS(Hadoop Distributed File System)
Hadoop独自の分散ファイルシステムです。ユーザからは1つの大きなファイルシステムとして見えますが、各ノードにまたがってファイルを保存しています。1つのノードに障害が起こってもデータの欠損が無いようにデフォルトで3つのノードに同じデータを保持(3重化)しています。
MapReduce
分散されたデータに対して、並列的に処理を実行するためのフレームワークです。Mapステップでは各スレーブノードのデータに対して処理を行い、ReduceステップにてMapステップで複数ノードに分散・実行された処理結果の集約が行われます。
Hadoop Common
Hadoopの機能をサポートするユーティリティ群です。
YARN(Yet Another Resource Negotiator)
Hadoop1系までは、独立したコンポーネントではありませんでしたが、Hadoop2系からはリソース管理を専用に行うモジュールとして独立化しました。MapReduceのリソース、ジョブスケジューリングのみならず、Giraph、Storm、Spark、Tez/Impalaなどの他の分散処理フレームワークのリソース管理も可能になりました。
Apache Ozone
Hadoop上で、分散オブジェクトストアを実現するためのプロジェクトです。数千億レベルのファイルやブロックにも拡張できるように設計されており、YARNやKubernetesなどのコンテナ環境での動作もサポートします。S3やHadoop File System APIなど複数のプロトコルを使用してアクセスが可能です。元はHadoopのサブプロジェクトでしたが、Apacheトッププロジェクトの一つとして独立しました。
Apache Submarine
YARNのようなリソース管理プラットフォーム上で、ディープ・ラーニング・アプリケーション(TensorFlow、PyTorch、MxNetなど)を動作可能にするためのプロジェクトです。元はHadoopのサブプロジェクトでしたが、Apacheトッププロジェクトの一つとして独立しました。Hadoop 2.7.3以上で利用可能です。
ユースケース
Hadoopは、MapReduceの代わりに、より高速で処理を行えるApache Sparkを使用することが出来ます。詳細はこちらをご参照ください。
動作環境
Hadoopは、Java言語で作られているため、JVMが必要です。2024年2月現在のステーブルバージョンであるHadoop 3.3.6では、Java 8及びJava 11をサポートします。JVMが動作する環境であれば、OSは問いません。
Hadoopが動作するOS
- 主要なLinuxディストリビューション
- Window
- MacOSX
など
Hadoopは、OpenJDKにおいて正常動作することが確認されています。それぞれのJDKにおける動作検証結果は下記のHadoop Wikiページを確認してください。
Hadoopは、コンパイル済みのバイナリパッケージと、ユーザが自身でコンパイルするソース版の両方が提供されています。
コンパイル済みのバイナリパッケージはすぐに使うことができるようになっている反面、拡張できない設定もあるため、ユーザが必要な機能を有効にするにはソースからビルドする必要がある場合もあります。
Apache Hadoopのライセンス
HadoopはApacheのトップレベルプロジェクトの1つです。ライセンスはApache License 2.0となっており、ユーザはそのソフトウェアの使用や頒布、修正、派生版の頒布をすることに制限を受けません。
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象
Apache Spark
アパッチ スパーク。Hadoopの後発として期待されるビッグデータ処理基盤です。
-
サポート対象
Apache Kafka
アパッチ カフカ。分散ストリーミングプラットフォームです。