更新中Udacity, Intro to Hadoop and MapReduceの受講メモ.6部構成の無料講座.全ての動画に日本語訳があり,とても助かる.

1. Big Data

  • Big Dataとは,一つのマシンでは処理しきれないほど大量のデータである.
  • Big Dataにおける課題は主に以下の2つ:
    • データが高速に生成されること.
    • データが異なるソースから多様なフォーマットで生成されること.
  • データの性質を表現する三つのV:
    • Volume(量):データを保存するだけではなく,処理することも考える必要がある.
    • Variety(多様性):非構造データや半構造データが増加しており,従来のデータベースへは保管が難しい.もし非構造データをそのまま保存できれば,後で活用できるかもしれない.Hadoopでは,データフォーマットによらず,そのまま保存できる.
    • Velocity(速度):処理速度が速ければ速いほど,より多くのビジネスチャンスが生まれる.
  • Hadoopの由来は,製作者の子供のおもちゃ.
  • Hadoopの技術的コアは2つ:
    • HDFS(Hadoop distributed file system)による分散ファイル保存.
    • MapReduceによるデータ処理.
  • Hadoopでは,データの保存及び処理が,クラスタ毎に行われる.
  • Hadoop ecosystem:
    • PigHive:MapReduceのハイレベルインターフェース.SQLチックに使える.
    • Impala:HDFSへの低レベルインターフェース.PigやHiveより高速.
    • SqoopFlume:他のデータベース上のデータを,クラスタとして保存できる.
    • HBase:HDFS上のリアルタイムデータベース.
    • Hue:GUI.
    • Oozie:ワークフロー管理ツール.
    • Mahout:機械学習ライブラリ.
    • Cloudera:環境構築ツール.上記のソフトウェアをまとめてインストールできる.

2. HDFS and MapReduce

  • HDFSでは,データを64Mbyteのブロックに分割し,それぞれ別のマシンに保存する.
  • ネームノードは,どのブロックがどのマシンに保存されているかというメタデータを管理する.
  • 冗長性のため,Hadoopはブロックを三回複製する.またネームノードの複製も用意する.
  • hadoop fs -lsなどで,HDFSにアクセスできる.-lsの部分は,UNIXのファイルシステムコマンドを利用可能.
  • ハッシュテーブルは,Big Data適用時に,処理時間とメモリ消費という課題があった.
  • MapReduceのまとめ:
    • Map:小さく分割されたデータを,<key, value>形式で保存し,同一keyでまとめる.Mapperの出力を中間レコード(Intermediate records)と呼ぶ.
    • Shuffle and sort:中間レコードをReduceに渡し,keyでソートする.
    • Reducekey毎に処理し,<key, values>リストを作成する.
  • 最終結果をソートするためには,単独のReducerを使うか,別途処理を行うか.
  • 各Reducerが受け取るkeyの数は,事前にはわからない.等分されるとは限らない.
  • Job trackerが,MapperとReducerにジョブを割り当てる.
  • 各デーモンは,Task trackerを持つ.
  • HadoopではJavaが使われるが,Pythonを使うこともできる.
  • hs {mapper script} {reducer script} {input_file} {output directory}で実行できる.ただし,{output directory}が既に存在する場合,エラーが返されるので注意.
  • hadoop fs -putでデータをHDFSに保存し,hadoop fs -getで取り出す.
  • 仮想マシンで実際にHadoopを動かす.以下,参考:

3. MapReduce Code

  • Hadoop streamingにより,どんな言語でも処理を書くことができる.
  • MapperおよびReducerには,sys.stdin形式でデータを入力する.for line in sys.stdin:以下に処理を書く.
  • MapperおよびReducerは,処理結果をprintで標準出力する.
  • シェルで$ ./mapper.pyで実行すれば,Hadoop外でMapperの動作を検証できる.Reducerについても同様.さらに,以下のコマンドで全ての処理を検証可能.
$ cat testfile | ./mapper.py | sort | ./reducer.py

  • 詳細は,以下の動画がとてもわかりやすい.

4. Project

  • 1-1. 全店舗におけるカテゴリー毎の売上額を求めよ.
  • 1-2.
  • 1-3.
  • 2-1.
  • 2-2.
  • 2-2.

5. MapReduce Design Patterns

6. Project Prep