本科前幾年就學(xué)過Hadoop, Spark 但是一直沒有非常理解原理,今天看Bit Tiger 講解有一點(diǎn)新的收獲。
首先要了解背景:

在Hadoop出來之前,當(dāng)時處理大數(shù)據(jù)情況都是把存儲還是計算的機(jī)器分開的。 要處理數(shù)據(jù)的時候,Computing Cluster會從存儲數(shù)據(jù)的storage里調(diào)取data來處理。但是computing是很expensive的,如果要把大部分能量花在IO 讀取上就太浪費(fèi)了?!疽郧奥犝fcomputing 時間都是給人有限制使用的】
Count the word frequency of a web page


合并的時候很麻煩。

之后就想到把數(shù)據(jù)和計算放在同一個地方來弄。

NameNode基本算是管理員master一樣。 查找數(shù)據(jù)什么的都要先問他,他知道index在哪里。

所以如何計算? 對于數(shù)單詞這么一個簡單的事情,Single Machine 肯定做不了 數(shù)據(jù)這么大的事情,因?yàn)閙emory放不下?!咀⒁?,這里面試經(jīng)??肌?/b>

多線程在多臺機(jī)器上計算也很難處理,效率也許很低,線程還可能掛掉。

Map_reduce 這個framework的出現(xiàn)幫助data science 的人可以專門只做分析,其他的不用操心。


還是有一個Master Node,底下一堆員工worker來干活。 master會監(jiān)考進(jìn)度, 員工效率。 不行的員工就kill了 重新launch一個新的來干活。
但是Hadoop map reduce效率也不是沒有缺點(diǎn):
因?yàn)镠adoop 數(shù)據(jù)存HDFS上, map的時候取出來一次, 中間map好又要放到Intermediate HDFS上, Reduce的時候又要讀取出來再計算。而且這個過程也許會repeat好幾次。略費(fèi)時間。【這里我怎么覺得跟之前古老的計算存儲分離沒差很多。。?!?/b>

Spark 可以更好的解決Hadoop的問題:
Spark 在中間過程中不放回HDDFS,而是存放在Memory里,這樣提取很快。【memory為什么放得下?】


與Hadoop不同,Spark會先計算出big picture 再行動。

當(dāng)你給一個driver program的時候, Spark每一步都是不做計算而是構(gòu)建一個direct graph, 優(yōu)化整個運(yùn)行路徑。直到你說reduceByKey的時候才真正開始計算。這樣的話 因?yàn)樾枰臇|西都group在一起了,所以之后不需要再放回HDFS再讀取。
最后, Databrick上似乎提供了一個Spark的玩耍服務(wù),看起來不錯。
