2013/12/19

ビッグデータ MapReduce

ビッグデータは、高ボリューム、高速度、高バラエティの情報資産のいずれか(あるいは全て)であり、新しい形の処理を必要とし、意思決定の高度化、見識の発見、プロセスの最適化に寄与する

MapReduce
ーーーーーーーーーーーー
map関数は、配列要素に1つずつ順番に処理を加えていき、
配列として結果が返ってきます
ーーーーーーーーーーーー
reduce関数-->配列の(左から右へ) 2 つの値に対して同時に関数を適用し、単一の値にします
★★javaScript
var ary = [1,2,3,4,5];
function sum(a) {
  return a.reduce(function(x, y) { return x + y; });
}
// 初回
// x = 1, y = 2
// 累積値: 3

// 2回目
// x = 3(累積値), y = 3
// 累積値: 6
。。。
ーーーーーーーーーーーー


Map ステップ - マスターノードは、入力データを受け取り、それをより細かい単位に分割し、複数のワーカーノードに配置する。受け取ったワーカーノードが、更に細かい単位に分割し、他の複数のワーカーノードに配置するという、より深い階層構造の分割を行うこともある。そして、各ワーカーノードは、その細かい単位のデータを処理し、処理結果を、マスターノードへと返す。

Reduce ステップ - 続いて、マスターノードが、Mapステップでの処理結果を集約し、目的としていた問題に対する答え(結果)を何らかの方法によって出力する。


ビッグデータの処理においては、並列分散処理が有効になるが、これは人工知能の研究から生まれた仕組みである。人間の脳は、約1200億のニューロンが並列処理をしており、情報の伝達速度は時速350~400キロといわれている。1つのニューロンが死んでしまっても、処理が停止しない頑強性も備えている。こうした仕組みに基づいて、並列分散処理やMPP、Hadoopなどが開発されている

インフラに投資する場合、まず必要なのはデータであり、次が問い合わせ。まず蓄積して、次に構造化である"と語っている。工藤氏は、「時と場合にもよるが、データの利用方法は刻々と変化するので、構造化を考えすぎて機会を逃すのは本末転倒。データを蓄積しておいて構造化や問い合わせを考えることに関して異論はない



分散処理をどのように実行するかも気になりますが、
MapReduceアルゴリズムを利用する場合は、
まずは「自分が実行させたい処理をどのように実現すればいいのか」という点から理解していくのが早道です。
ここでは分散処理そのものではなく、
分散処理されるプログラムがどういうものかを理解することに主眼を置くことにします。


入力データを分割して「Map処理」を行うプログラムで分散処理をさせ、
その結果を「Reduce処理」を行うプログラムへ渡して、そちらも分散処理をしています。
分散処理を行うプログラムを開始したり停止したりする制御やデータ入出力の同期といったことは「Masterプログラム」が行っています

文字カウンター  abcaba

map: a b c a b a
     1 1 1 1 1 1
sort:
     a a a b b c
     1 1 1 1 1 1
reduce:
    a
      a a a
      1 1 a
    b
      b b
      1 1
    c
      c
      1
 =>
   a b c
   3 2 1


Keep it short and simple!!