読者です 読者をやめる 読者になる 読者になる

新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。気づけば社会人3年目に突入。

学習記録

[Hadoop] Hadoopの基礎知識

参考書籍

Hadoop徹底入門 第2版

Hadoop徹底入門 第2版

内容:1章 Hadoopの基礎知識

Hadoopとは
Hadoopの用途
  • 大量のデータを高速に処理
    • 既存のバッチ処理の置き換え <- 必ずしもこれに固執する必要はない
    • むしろ今までできなかった、高コストであきらめていた処理を現実的な費用で実現
  • 現在の主流な用途
    • ログ解析
    • レコメンデーションエンジン
    • 検索インデックス
    • 今後はデータウェアハウス、ビジネスインテリジェンスでの活用が進む?
大規模データ処理における課題と対応
  • システムが扱うデータ規模の増大
  • 大量データ処理の仕組み
    • 対象データを高スループットで読み込めることが必要
    • 一般的なSATA性能は実効速度で約70MB/sec -> 1TBに3.9時間、SSDでもその数倍程度
    • 1000本から同時に読み込めれば1TBも14secで読み込める
    • Hadoopの分散FS、HDFSでは各サーバの内蔵ディスクにデータを格納
    • 大容量のファイルを細かいブロックに分割し、複数サーバにちりぢりに配置
    • なるべく各サーバ内で処理を行い、サーバ間のネットワークを介した通信は最後のみ
  • Hadoopの提供する機能
    • HD/Serverを複数並べて同時に利用する仕組み
    • 分散処理の各種共通機能(タスク分割、リカバリなど)
Hadoopの適用領域
項目 RDBMS Hadoop
データサイズ 〜数テラ テラ〜ペタ
データ操作 小さなデータの参照・更新 大きなデータの挿入・参照。更新はない
レスポンス 速い 遅い
スケール 1桁台数でスケールアップ 数十〜数千台でスケールアウト
データ構造 構造化データ 準構造化データ
  1. データサイズ
    1. RDBMSでは1インスタンスが扱うデータサイズは数GB〜数TB程度
    2. 少なくとも数百GBオーダ以上でなければHadoopを使う意義はあまりない
  2. データ操作
    1. RDBMSでは1トランザクションで1レコードの参照、更新が多い
    2. Hadoopでは一度にまとめて大量のデータを扱うことを想定
    3. 格納データに対する更新処理という概念はなく、逆に一度しか書き込みを行わないという制限を加えることで高いスループットを実現
  3. レイテンシ
    1. RDBMSではショートトランザクションが主、高速なレスポンス
    2. Hadoopでは1つのジョブで分散処理のためのオーバヘッドが10〜20sec程度発生
    3. すぐに数分オーダの処理時間に到達するため、バッチ処理向き
  4. スケール
    1. RDBMSはデータの整合性に厳格=ロックを利用=並列処理に向いていない
    2. Hadoopはスケーラビリティの追求が大前提
  5. データ構造
    1. RDBMSではデータが事前に定義された構造に従い正規化されている必要
    2. Hadoopではデータ構造を事前に定義する必要はない
    3. 処理の実行時に必要に応じてデータの意味付けを行う
Hadoopのシステム構成
  • HDFS
    • 各スレーブサーバ上のext4などのローカルFS上に作られるオーバーレイFS
    • 利便性
      • 透過性:複数サーバ上にファイルがあることを意識する必要が無い
      • 拡張性:ディスク容量が足りなくなればサーバを追加するだけ
    • 信頼性
      • 分割配置するだけでなく、1つのファイルを分割したブロックを複数サーバに多重に書き込む
      • 標準では、1ブロックは3つのサーバに多重で保持
    • アクセスパターンの限定
      • 基本的にはシーケンシャルなストリーム読み込みを前提(ランダムアクセスには向かない)
      • データ書き込みは一度だけ、その後は読み込む処理だけを想定
  • Hadoop MapReduce
    • Map処理:主に入力ファイルの1行1行に付いてフィルタリング処理
      • 入力データの集合を分割し、Mapタスクに割当
      • 入力データはHDFS上のファイルで、データ分割はMapReduceフレームワークが自動で行う
      • 各MapタスクをTaskTrackerに振り分け
      • 各Mapタスクは入力データから1件するキーバリューのペアを取り出し、ユーザ定義のMap処理を行う
      • 処理結果もKVのペアの形で出力
    • Shuffle処理
      • Map処理後のデータをソードして、同じ値のkeyを持つデータをそれぞ1カ所にまとめる
      • このときスレーブサーバ間でネットワークを介してデータの転送が行われる
      • この処理はFWが自動的に行う
    • Reduce処理
      • Keyごとにまとめられたデータに対してReduce処理
      • =Keyの数だけ処理が行われる
      • 商品(Key)ごとの販売数(Value)の計算など
適用事例
  • 例:PoSデータの解析
    • 処理サイクルの短期化
      • 大量データ解析のバッチ処理は、1日1回実行するのがやっと
      • Hadoopを用いて処理時間を短縮、バッチサイクルを15minごとにすることでリアルタイムに売れ行きを把握
    • 分析範囲の拡大
      • データ量を増やして1月ごとの解析から1年を通じた分析なども可能