Hadoopとは

「膨大な量、急激な増加、多様な形式」といった特徴を持つビッグデータ。

これを多数の小さなデータのまとまりに分割し、複数のコンピューターに分散させて処理します。

その結果を集約して、短時間で効率よく結果を出すためのソフトウェアHadoopです。

膨大なデータの量ですから一台のコンピューターで処理するとなると、たとえ高速・高性能なコンピューターを使っても限界があります。

しかしこのソフトウェアを使えば、コンピューターを必要に応じて増やすことで処理能力を順次拡大できるので上限を気にする必要がありません。

最大数千台のコンピューターに分散させることができます。

Hadoopは、大きく分けてHDFSMapReduceで構築されています。

  • HDFS(Hadoop Distributed File System:分散ファイルシステム)

膨大なデータを複数のマシンに分割保管して、これを一つのストレージとして扱うための仕組みです。

  • MapReduce

HDFSから取り出したデータを複数のデータのまとまりに分割し、複数のコンピューターに並列処理させる一連の手順を管理します。

このようなデータが生まれたことからビッグデータの扱いが容易になり、その適用範囲が広がりつつあるのです。


HadoopとSparkの違いについて


Hadoopのメリット

Hadoopのメリットはまず、サーバーの台数に比例して処理能力を高められる、いわゆるスケールアウトが可能だということ。

Web上のビッグデータはどんどん増え続けます。そんなときHadoopを実装していればコストを抑えつつ対応し続けられるのです。

また、安定性が高いのも魅力の一つといえます。

どこか一つのサーバーで障害が起こってもほかのサーバーが対応することで、処理が止まりません。


Sparkとは

Sparkは簡単に説明すると分散処理プラットフォームです。

データの格納場所をHDDやSSDではなくメモリにすることで、Hadoopの10倍~100倍の速度を実現します。

カリフォルニア大学バークレー校で開発が進められ、2014年にApacheソフトウェア財団に寄贈されました。

SparkはHadoopが弱点とするリアルタイム処理に対応可能。

さらにデータの格納の選択肢もHadoop Distributed File System(HDFS)、Cassandraなど多様です。


両者の違い

現在HadoopとSparkは共存関係にあります。

  • リアルタイムの高速処理が求められるデータはSpark
  • メモリに乗り切る以上のサイズのデータを処理する場合はHadoop

などと使い分けられているのが現状です。


AWS上での構築方法について


AWSとは

複数のコンピューターや画面 AWSとはアマゾンウェブサービスの事です。

ウェブサービスという形態で、企業を対象にITインフラストラクチャサービスの提供を開始しました。

クラウドコンピューティングの主なメリットの1つは、必要な時に必要なだけ、低価格でITリソースを提供することができることです。

クラウドを利用することで、企業は数週間・数カ月も前からサーバーや他のITインフラストラクチャを計画・調達する必要もありません。

クラウドなら、即座に何百・何千ものサーバーを数分で起動し、迅速に結果を生み出すことができます。


AWSでできること

AWSでは、

  • コンピューティング
  • ストレージ
  • データベース
  • 分析
  • ネットワーキング
  • モバイル
  • 開発者ツール
  • 管理ツール
  • IoT
  • セキュリティ
  • エンタープライズアプリケーション

など、グローバルなクラウドベース製品を幅広く利用可能です。

これらのサービスを利用すると、企業や組織はより迅速かつ低いITコストでスケールすることができます。

これにより、ウェブまたはモバイルアプリケーション・ゲーム開発・データ処理・データウェアハウスなど多様なワークロードを支援しています。


Amazon EMRのApache Hadoop

Apache Hadoopは大規模データセットの効率的な処理に使用できる、オープンソースのソフトウェアプロジェクトです。

通常データの処理と保存は、単独の大型コンピューターで行います。

代わりに、Hadoopでは商用ハードウェアをクラスター化して、巨大なデータセットの分析を並列実現できます。

Hadoopエコシステムには多数のアプリケーションと実行エンジンが存在。

分析ワークロードのニーズに合わせて様々なツールが提供されているのです。

Amazon EMRでは、すべてが設定済みの伸縮自在なAmazonEC2インスタンスクラスターを簡単に作成および管理できます。

これらのクラスターではHadoopとHadoopエコシステム内の他のアプリケーションを実行可能です。


Hadoopエコシステム内のアプリケーションとフレームワーク


Hadoopは様々なアプリやフレームワークが入っている

Hadoopは一般的に

  • MapReduce(実行フレームワーク)
  • YARN(リソースマネージャー)
  • HDFS(分散ストレージ)

を含む実際のApache Hadoopプロジェクトを指します。

Hadoop MapReduceの代わりに実行エンジンとして使用できる、次世代のフレームワーク・Apache Tezのインストールも可能です。

Amazon EMRには、HadoopからストレージレイヤーとしてAmazon S3を使用するためのコネクタであるEMRFSも含まれています。

さらにHadoopエコシステムには、他のアプリケーションやフレームワークも含まれているのです。

Hadoopエコシステムには、コアコンポーネントに追加機能を構築するために設計されたオープンソースのツールが多数含まれています。

Amazon EMR を使用することで、

  • Hive
  • Pig
  • Hue
  • Ganglia
  • Oozie
  • HBase

といったツールを簡単にクラスターにインストールして設定することができます。

Hadoopに加えてApache Sparkや、インタラクティブSQL用のPrestoといった他のフレームワークもAmazon EMRで実行できます。


Hadoop:基本コンポーネント

Amazon EMRではクラスターのノード間で、

  • Hadoop MapReduce
  • YARN
  • HDFS
  • Apache Tez

といったHadoop内のアプリケーションがプログラムによってインストールされ、設定されます。


Hadoop MapReduce、Tez、YARNを使った処理

Hadoop MapReduceとTezは、Hadoopエコシステム内の実行エンジンです。

ジョブを小さな部分に細分化するフレームワークを使用してワークロードを処理します。

細分化されたジョブは、Amazon EMRクラスター内の複数のノードに分散可能です。

Hadoop MapReduceとTezは、クラスター内のどのマシンにも障害が発生する可能性があるため、耐障害性のある設計になっています。

タスクを実行しているサーバーに障害が発生した場合は、Hadoopによりそのタスクが完了するまで別のマシンで再実行されます。

また、Javaを使うことで以下のようなことも可能です。

  • MapReduceやTezのプログラムを記述する
  • Hadoop Streamingを使用してカスタムスクリプトを並列実行する
  • MapReduceやTezの高レベルな抽象化のためHiveやPigを利用する
  • Hadoopとのやり取りに他のツールを利用する

Hadoop2以降、リソース管理はYet Another Resource Negotiator(YARN)によって管理されます。

YARNによって全クラスターのリソースすべてが追跡され、処理のジョブタスクを実行させます。

それらのリソースが自動的に割り当てられるのです。

YARNを使うと、Hadoop MapReduceやTezのワークロード、およびApache Sparkといった他の分散フレームを管理できます。

Amazon S3とEMRFSを使用したストレージ


便利機能

Amazon EMRクラスターで、EMRファイルシステム(EMRFS)を使用するのが良いでしょう。

HadoopのデータプレイヤーとしてAmazon S3を活用できます。

Amazon S3は高度かつ低コストで、かつ耐久性を備えた設計です。

そのためビッグデータ処理向けのデータストアとして非常に優れています。

Amazon S3にデータを保存することで、コンピューティングプレイヤーを分離させることも可能です。

ワークロードに必要なCPUとメモリに合わせて、Amazon EMRクラスターサイズを設定できます。

ストレージを最大にするために、クラスターにノードを追加する必要もありません。

さらに、Amazon EMRクラスターがアイドル状態の場合は、終了することでコストを節減できます。

この場合もデータはAmazon S3に残るのです。

EMRFSは、HadoopでAmazon S3に並列で高パフォーマンスの読み書きが直接行えるよう最適化されています。

Amazon S3のサーバー側とクライアント側の暗号化により、暗号化されたオブジェクトを処理することも可能。

EMRFSでは、Amazon 3をでーたブレイクとして使用でき、Amazon EMRを伸縮自在なクエリレイヤーとして使用できます。


HDFSによるクラスターストレージ

Hadoopには、Hadoop Distributed File System(HDFS)が含まれています。

HDFSはクラスターのローカルディスクに大きなブロックで保存する、分散ストレージシステムです。

HDFSではレプリケーションがモニタリングされ、ノードの障害と新しいノードの追加に応じてノード間のデータのバランスが調整されます。

HDFSはHadoopとともにAmazon EMRクラスターに自動的にインストールされ、HDFSとAmazon S3を併用して入出力データを保存。

Amazon EMRのセキュリティ設定をすると、HDFSを簡単に暗号化できます。

また、Amazon EMRでは、入力データがAmazon S3に存在する場合もあるでしょう。

ここでもHDFSとローカルディスクを使用するようHadoopを設定できます。


HadoopをAmazon EMRで運用する利点


速度と俊敏性の向上

新しいHadoopクラスターを動的にすばやく初期化することや、既存のAmazon EMRクラスターにサーバーを追加することも可能です。

ユーザーやデータサイエンテイストがリソースを利用できるようになるまでの時間を大幅に短縮します。

HadoopをAWSプラットフォームで使用すれば、実験や開発のためのリソース割り当てにかかるコストと時間は削減されるのです。

そうすることで、組織としての俊敏性が向上します。


管理の複雑さを軽減

Hadoopの設定やネットワーク・継続的な管理メンテナンスは、複雑で困難なアクティビティになる可能性があります。

Amazon EMRでは、Hadoop EMRでは、Hadoopのインフラストラクチャ要件がマネージドサービスとして処理されるのです。

これによりコアビジネスに専念することができます。


他のAWSサービスとの結合

Hadoop環境を

  • Amazon S3
  • Amazon Kinesis
  • Amazon Redshift
  • Amazon DynamoDB

といったその他のサービスと簡単に統合することも可能です。

AWSプラットフォームのさまざまなサービスで、データの移動・ワークフロー・分析が行えます。

さらに、AWS GlueデータカタログをApache Sparkのマネージドメタデータレポジトリとしても使えるのです。


必要なクラスターに対してのみ支払う

Hadoopのジョブの多くは、実質的にスパイクが発生しやすいものでしょう。

例えばETLジョブは1時間ごと、1日ごと、1カ月ごとに実行される場合があります。

その一方で、金融会社や遺伝子配列のモデリングジョブは年に数回のみ発生するという場合もあるのです。

Amazon EMRでHadoopを使用することで、これらのワークロードのクラスターを簡単に立ち上げられます。

そうすることで結果を保存することができ、必要がなくなったHadoopリソースをシャットダウン。

不要なインフラストラクチャからコスト削減できます。


可用性と災害多作の向上

Amazon EMRでHadoopを使用することで、どのAWSリージョン内でも必要な数のアベイラビリティーゾーンにクラスターを起動可能です。

1つのリージョンやゾーンに対する潜在的な問題や脅威は、別のゾーンにクラスターを起動することで数分のうちに簡単に回避できます。


柔軟なキャパシティー

Hadoop環境をデプロイする前に、キャパシティープランを立てることもあるでしょう。

この場合、しばしば高価なリソースのアイドル状態やリソースの制限という結果が発生します。

Amazon EMRでは、必要なキャパシティーを持つクラスターを数分で作成可能です。

Auto Scalingを使用して、ノードを動的にスケールアウトおよびスケールインできます。


Hadoopとビッグデータの関係

Hadoopは非常にスケーラブルであるため、ビッグデータワークロードの処理に広く使用されています。

Hadoopクラスターの処理能力を向上させるには、ニーズを対応するために必要なCPUとメモリを有するサーバーを追加します。

Hadoopでは高いレベルの耐久性可用性が実現されており、コンピューティング分析ワークロードを並列処理することも可能です。

処理の可用性・耐久性・スケーラビリティによって、Hadoopはビッグデータワークロードに適したものとなっています。

Amazon EMRを使用すれば、数分のうちにHadoopが動作するAmazon EC2 インスタンスのクラスターを作成や設定が可能。

データから価値を引き出すことができるようになります。


Amazon EMRでのApache Spark


特徴と利点・高速なパフォーマンス

Directed Acyclic Graph(DAG)実行エンジンを使用することにより、Apache Sparkではデータ変換用の効率的なクエリプランが可能です。

また、Apache Sparkでは、入力、出力、中間データのインメモリデータがResilient Distributed Dataset(RDD)として保存されます。

このためI/Oコストをかけずに高速処理が可能になり、反復ワークロードやインタラクティブなワークロードのパフォーマンスが向上します。


アプリケーションをすばやく開発

Apache SparkではJava、Scala、Pythonがネイティブサポートされ、アプリケーションの構築にさまざまな言語を使用できます。

Spark SQLモジュールを使用して、SQLまたはHiveQLクエリをApache Sparkに送信できるのです。

アプリケーションの実行に加え、Apache SparkからPythonまたはScalaを直接使用して、Apache Spark APIを使用することもできます。

さらにデータの調査と可視化のために、Zeppelinを使用してコラボレーション型ノートブックを作成することも可能です。

アプリケーション履歴を使用するのも便利な機能がたくさんあります。

  • Amazon EMRコンソール
  • ネイティブSpark UI
  • クラスターの履歴サーバー

これらを使用して、Sparkワークロードを調整したりデバッグしたりできるのです。


Amazon EMR機能セットとの結合

ワークロードに応じて以下のことができます。

  • Amazon EMR step APIによるApache Sparkジョブの送信
  • Apache SparkとEMRFSを併用したAmazon S3データへの直接アクセス
  • Amazon EC2スポットキャパシティーを利用したコスト節減
  • Auto Scalingを使用したキャパシティーの動的追加や削除
  • 長時間のクラスターや一時的なクラスターの作成

Amazon EMRのセキュリティ設定を使用すると、Spark暗号化とKerberosによる認証を簡単に設定できます。

またAWS Glue Data Catalogを使用すれば、こんなことも可能です。

  • Spark SQLテーブルのメタデータの保存
  • Amazon SageMakerをSpark機械学習パイプラインで使用する

Amazon EMRではHadoop YARNにApache Sparkをインストールして管理します。

Hadoopエコシステムの他のアプリケーションも、クラスターに追加できるのです。


まとめ

Hadoopの使い方や機能について解説しました。

できることがかなり幅広いため、最初の内は混乱してしまうかもしれません。

慣れるまでは今の自分に必要なこと・やりたいことの範囲で活用していきましょう。

少しずつ手を広げることで、使いこなせるようになっていきます。


toiroフリーランスは、SHIFTグループがプライムとして参画している独自案件をフリーランスエンジニア向けに紹介する唯一のプラットフォームサービスです。

エージェントによるサポートもありますので、ご利用を検討してみてはいかがでしょうか。