BigData基盤Hadoopの基礎についてまとめ

2021-05-15
Main Image

目次

こんにちは。

今回はBig Data分析基盤であるHadoopシステムについてまとめます。

この記事の目標

  • Hadoopとは何か理解する
  • MapReduceとは何か理解する
  • Hive, Pigとは何か理解する

基本用語の確認

分散処理(並列処理)

一つのジョブを複数に分けて同時実行しながら進めることで実行時間を短縮する処理。

たとえば、マネージャがAさんに仕事(ジョブ)を与えたとき、Aさんがそのジョブを細分化して、5人の部下にそれぞれタスクを割り当てます。5人のタスクが完了したら、Aさんがその成果を統合してマネージャに報告します。これによって、本来Aさん1人だと2週間かかった仕事が、4日で完了させることができたとします。

この例と同じ仕組みでコンピューティングジョブ(計算)の実行時間短縮を行うのがHadoopとMapReduceです。

Hadoop

スケーラブルなデータストレージ+バッチデータ処理ができるシステム(フレームワーク)。

  • 複数ソースからデータの取り込みと並列処理
  • TB(テラバイト)~PB(ペタバイト)規模のデータ保存
  • 数千のノード処理
  • 耐障害性 ノードに障害が発生しても中断せず実行可能
  • Hadoop以外への結果の出力(配信)

Hadoop Common

他のHadoopモジュールと共通のユーティリティ・ライブラリ。

Hadoop Distributed File System (HDFS)

データを保存する分散型ファイルシステム。

Hadoop YARN

データ処理をスケジュール実行するフレームワーク。

Yet Another Resource Navigatorの略。

Hadoop MapReduce

クラスターで大規模データを処理するYARNベースのシステム。

Apache Hadoopの概要

大規模データの分散処理を支えるOSSフレームワーク。

GoogleのMapReduce、Google File Systemに触発されたApacheのトップレベルプロジェクトで世界規模で使用されている。

Apache Hadoop(Wikipedia)

HDFSの構成

ここではデータ保存に関する構成について見ます。

クライアントがネームノードに書き込みリクエストを発行すると、データブロックを書き込む場所を返す。内部的に、データブロックが割り当てられたデータノードに書き込まれる。

データブロックはデフォルトで128MB。Hadoopはデータブロックごとに3つのコピー(レプリカ)を保存します。

データノード

実際のビッグデータが保存されるサーバー

ネームノード

データが保存されている場所を示すマップが保存されるサーバー

ラックアウェアネス

Hadoop 2.xの機能。有効にすると、3つ目のデータブロックは最初の2つとは別のラックに保存し、耐障害性をアップする。

YARNの構成

ここでは並列処理を実現する構成について見ます。

YARNフレームワークがHadoopにおけるジョブの分散を処理する中間層としてはたらきます。

この分散処理にあたり、YARNはグローバルリソースマネージャアプリケーションリソースマネージャを使用します。

  1. クライアントがジョブをYARNリソースマネージャに送信する。
  2. YARNリソースマネージャはネームノード内で実行されている。
  3. リソースマネージャはジョブを処理するデータノードを決定する。
  4. この決定はすべてのデータノードで実行されているノードマネージャデーモンと通信して判断される
  5. ノードマネージャはノード上のコンテナを監視し、コンテナの使用状況をリソースマネージャに報告する。
  6. リソースマネージャがこの報告内容からジョブとコンテナの可用性に基づいて、アプリケーションマスターを起動するノードを決定する。
  7. アプリケーションマスターがコードを実行する。
  8. コードのプロセスが完了すると、リソースが空き(利用可能)になったことをリソースマネージャに報告する。

ビッグデータのジョブタイプ

MapReduce

  • 大規模データの並列処理
  • 2つのフェーズ MapReduce
  • 機能 パーティション、シャッフル、ソート

Hive

  • DWHのインフラ
  • HQLの提供
  • 非構造化データをクエリ
  • 要約、分析、アドホッククエリ

Pig

  • データタスクのプログラミング環境
  • Pig Latin : クエリ、データ操作、SQL+MapReduce

Hadoopのバージョン(1.xと2.x)について

データストレージはどちらもHDFS。

1.xはデータ処理・リソース管理にMapReduce V1を用いていたが、2.xでは以下の構成。

  • データ処理 : MapReduce V1
  • リソース管理 : YARN

YARNを中間層として、ビッグデータ処理にMapReduce以外にもアプリケーションが使えるようになった。例は以下の通り

  • MapReduce(バッチ)
  • Hive(クエリ)
  • Pig(スクリプト)
  • HBASE(オンライン)
  • Spark(インメモリ)

Hadoop 1.xの特徴

ストレージ(HDFS1)について

  • ネームノードのメタデータがネームノード内のメモリに保存されているため、スケーリングに適さない。
  • チェックポイントノード(セカンダリネームノード)というメタデータのバックアップ。コールドスタンバイなので、プライマリに障害が発生したらジョブが強制終了。再起動が複雑。

MapReduceジョブのみ実行可能。

  • ネームノードのジョブトラッカーがジョブのすべてのスケジュールや管理を担当。
  • 割り当てられたデータノード内のタスクトラッカーが、ジョブトラッカーの指示に従ってタスクの実行、Map、Reduceを担当。

Hadoop 2.xの特徴

2.xは2013年リリース。

ストレージ: HDFS2

  • ネームノード、セカンダリネームノードに加え、パッシブネームノード(スタンバイネームノード)で冗長化し単一障害点問題をクリア。
  • データノードがアクティブとパッシブの両方を認識しブロックレポートを送信。(書き込みはアクティブが対象で、読み込みはアクティブ/パッシブどちらも対象にできる。)
  • ネームノードフェデレーションによりクラスターで複数の名前を使用できる。組織内の異なるグループで異なるネームノードに関連付けてクライアントアプリケーションが同じネームノードにアクセスする必要がなくなり、スケーラビリティが向上する。

データ処理 : YARN

  • YARNが中間に入りMapReduceに限らずアプリケーションを実行できる
  • ジョブトラッカーデーモンを使用しないため拡張性あり。(スケーラビリティがあり、過剰負荷のデーモンが存在しない)

MapReduceとは

分散型データ処理のための並列処理ソフトウェアフレームワーク。

大量の非構造化データを並列処理するプログラムの作成が可能。

HDFSと並行して動作するよう設計されている。

MapReduceがない頃の問題点

  • 数十万台のプロセッサーの個別管理と並列分散化
  • ステータスとモニタリング
  • 耐障害性の確保
  • 効率的なI/Oスケジューリング
  • 計算データをストレージからコンピューティングマシンに移動するための通信帯域確保

MapReduceが提供する解決策

  • スケールアウトアーキテクチャ
  • 構造化データ・非構造化データの処理
  • マスターノードへの定期的なステータス報告(=耐障害性)
  • マスターノードが最適な作業ノードへジョブを采配
  • 優先順位に従った最適スケジューリング
  • デベロッパーへの柔軟性(Java, Python, C#, C++などに対応)
  • データ移動ではなく格納されたデータノードで処理

MapReduceによるデータ処理の段階(フェーズ)

MapReduceはキーバリューペアを入力として受け入れ、出力として生成する。

1. 入力

  • 処理するデータをHDFSに配置する。
  • 配置されたデータノードの集まりをHadoopクラスターという。

2. 分割

  • データファイル内の各行がMapperインスタンスに渡される。
  • データ行はKey=番号とValue=データで表現される。

3. Map

  • データ行の要素が、1度に一つずつ読み込まれる。
  • 入力要素を中間のキーバリューペアに変換する。

4. Shuffle

  • Map出力をReducerに入力する
  • すべての入力がKeyでソートされ、同じKeyが含まれるリストになる

5. Reducer

  • 入力リストの値をまとめて集約する。
  • 入力リストごとに1つの出力要素を生成する。

6. 出力

  • 集約された出力要素を単一のリストに結合する
  • 入力ジョブと出力ジョブはファイルシステムに保存される

MapReduceによる結合処理

以下の3タイプ

Mapサイド

Mapperで実行。高速だが制約あり。

  • 同じキーでソートされる
  • 同じ数のパーティション
  • 同じキーを持つ全てのレコードが同じパーティションに存在

Reduceサイド

  • Reducerで実行。
  • 制約が少なく、非構造化。
  • 効率性が低く、シャッフルが必要。

分散キャッシュ

  • Mapサイド結合で使用。
  • 結合前に小さなファイルをノート上のメモリにコピー。
  • 効率的でReducerが不要。

MapReduceのコンバイナーとパーティショナー

コンバイナー

  • Map後、Reducer前で実行するオプションのミニReducer。
  • 帯域幅を最適化する。

パーティショナー

  • KeyがReducerに割り当てられる方法を定義するアプリケーションコード
  • デフォルトはキーの単純ハッシュ(ハッシュパーティショナー)で、ReduceタスクとPartitionの数は一致する必要がある。

MapReduceのインターフェイス

Mapper

  • Mapフェーズでのデータ処理
  • map()でキーバリューペアを中間キーバリューペアのセットにマップ
  • 入力と出力のキーバリュータイプを定義する4つのパラメータが必要

出力コレクター

  • Mapperで出力された中間データの書き込み

Reducer

  • データ集約
  • Mapperの出力をキーバリューペアとして受け取る。
  • reduce()で処理
  • 入力と出力のキーバリュータイプを定義する4つのパラメータが必要

MapReduceの使用例

  • 世界中の病院がHadoopクラスターに感染症に関するデータを保存
  • Javaで記述されたMapReduceプログラムを実行し、どの感染症が増加しているかなどのシンプルな質問を計算
  • 感染症流行の可能性や時期に関する洞察を得られる

計算に何千個のノードを並列使用できるため、従来の計算よりも非常に高速。

Hiveとは

  • DWH(データウェアハウス)
  • MapReduceとHDFSを使用
  • HQLを提供

Hiveの特徴

  • レポート生成
  • 要約しやすい
  • アドホック分析
  • 非構造化データを構造化データとして管理
  • SQLスキルを活用できる

HiveとRDBMSとの比較

どちらかの代用ではなく、共存可能な別のものとして考える。

  • Hiveは非構造化データも可能、RDBMSは構造化データのみ
  • Hiveはデータサイズでスケールでき、高レイテンシーのクエリのみ対応(高速応答は無理)
  • Hiveはスキーマオンリードポリシー(読み込み時に制約チェック)、RDMBMSはスキーマオンライトポリシー(書き込み時に制約チェック)

Hiveのワークフロー

  1. HQL文がドライバに送信
  2. ドライバによってコンパイラが呼び出される
  3. コンパイラが文をDAGに変換
  4. ドライバがDAGから個々のMapReduceジョブをエグゼキュータ(実行エンジン)に送信

DAGは順序付けられたMapReduceジョブの有向非巡回グラフ(Directed Acyclic Graph)

Hiveのデータアーキテクチャ

  • データベース(テーブルとその他データを分離して名前競合を防ぐ名前空間のカタログ)
  • テーブル(HDFS内のファイルで構成される論理概念)
  • パーティション(ディレクトリ。Mapフェーズでのデータ読み取りとフィルタリングが減少し時間短縮できる)
  • バケット(テーブルディレクトリ内のファイルで、テーブルデータを分割した管理しやすいパーツ)

Pigとは

  • 大規模データセットを分析するためのスクリプト言語
  • オープンソースの環境
  • SQLに類似
  • Javaプログラミングが不要
  • Hadoopコンポーネントと連動(HDFS, MapReduce, YARNなど)
  • コード変更なしでMapReduceジョブが実行可能
  • Pig Latingという言語で記述する。

Pig Latinの特徴

  • マルチクエリアプローチ
  • UDF(ユーザ定義関数)
  • ネストされたデータ型(タプル、バッグ、マップ)
  • 構造化データと非構造化データ
  • スキーマはフィールドの名前とタイプ。
  • タイプは解析時間効率向上とエラーチェックに有効

Pig Latinのフロー

  • LOAD : データの入力
  • DUMP : 結果の表示
  • STORE : データの保存
  • CAT : ファイルの内容を出力
  • PigDump : 人が読めるUTF-8のタプルでデータを保存

Pig の実行タイプ

  • ローカルモード : 1台のマシンで実行
  • MapReduceモード : MapReduceジョブに変換しHadoopクラスターで実行

Pig の呼び出しタイプ

  • インタラクティブモード : Gruntを使用する手動コマンド、トラブルシューティングに有効
  • バッチモード : スクリプトシェル(Pig Latin文のグループ)、本番環境で使用

AWSによるビッグデータ分析基盤のクラウド化

以下のサービスが対応します。

収集

  • Amazon Kinesis Data Firehose (リアルタイム収集)
  • AWS Snowball

保存

  • Amazon S3 (オブジェクトストレージ)
  • Amazon Kinesis Data Streams (リアルタイム)
  • Amazon RDS (RDBMS)
  • Amazon DynamoDB (NoSQL)

処理と分析

  • Amazon EMR (Hadoop)
  • Amazon Kinesis Data Analytics (リアルタイム)
  • Amazon Redshift (DWH)

視覚化

  • Amazon QuickSight (BIツール)
  • Amazon Elasticserch Service (検索分析)

まとめ

というわけで、ビッグデータ分析の標準的なシステムであるHadoop、そしてそれを活用するMapReduce、Hive、Pigについてまとめました。

また、最後に関連するAWSのビッグデータ基盤についてもまとめました。

参考資料

今回のまとめの元となったものは、AWS Trainingから提供されているAWS Hadoop Fundamentalというデジタルトレーニングです。

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord