Hadoop是一個大數據處理平臺,也是一個集羣,可以對海量數據進行存儲和運算。MapReduce是Hadoop衆多組件當中的一個。Hadoop做爲一個分佈式系統,能夠將不一樣的機器設備鏈接起來進行存儲,也就是人們常說的HDFS,這也是Hadoop的一個構成部分;而hadoop的另外一個構成部分就是MapReduce了,前者負責數據的存儲,然後者負責數據的運算,並且能夠在MapReduce上進行編程開發。
在Hadoop架構中,MapReduce能夠分爲兩個階段,第一階段爲Map階段,第二階段爲Reduce階段;Map把調入文件進行切分,映射到不一樣節點;以後,就是Reduce發生做用,Reduce有些相似於合併同類項,對切分好的數據進行約化,既能起到彙總的效果,還可對數據起到精簡整理的做用,從而達到分佈式計算的效果。
Hadoop是開源框架,因此能夠經過編程用MapReduce分析數據,須要調用函數能夠由用戶或開發者自由選擇。
Python中的Map和Hadoop中的Map本質是同樣的,選擇一種Python的開源框架一樣能夠搭建一個簡單的分佈式系統,也能夠經過Map對數據文件進行切分,但過程和Hadoop中的Map是徹底不同的,能夠說是兩種不一樣的框架。咱們在學習的時候能夠進行類比來加深理解便可。
在Python當中,嚴格的講並不存在真正意義上的Reduce。Python有豐富的庫類,可調用各類函數或其餘語言編寫的模塊對數據進行處理,例如作描述統計的平均數、標準差、方差,推斷統計的線性迴歸、數據透視、假設檢驗等。在Python當中,這些能夠稱爲聚合分組運算。下面以其中的groupby爲例,來進行簡要的說明。
首先來看看下面這個很是簡單的表格型數據集(以DataFrame的形式):
>>> import pandas as pd
>>> df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],
... 'key2':['one', 'two', 'one', 'two', 'one'],
... 'data1':np.random.randn(5),
... 'data2':np.random.randn(5)})
>>> df
data1 data2 key1 key2
0 -0.410673 0.519378 a one
1 -2.120793 0.199074 a two
2 0.642216 -0.143671 b one
3 0.975133 -0.592994 b two
4 -1.017495 -0.530459 a one編程
假設你想要按key1進行分組,並計算data1列的平均值,咱們能夠訪問data1,並根據key1調用groupby:架構
>>> grouped = df['data1'].groupby(df['key1'])
>>> grouped
<pandas.core.groupby.SeriesGroupBy object at 0x04120D70>框架
變量grouped是一個GroupBy對象,它實際上尚未進行任何計算,只是含有一些有關分組鍵df['key1']的中間數據而已,而後咱們能夠調用GroupBy的mean方法來計算分組平均值:dom
>>> grouped.mean()
key1
a -1.182987
b 0.808674
dtype: float64分佈式
可見,Python和Hadoop中的Reduce的不一樣在於Python須要根據Key進行分組,用戶根據須要調用相應函數;而Hadoop的Reduce過程要更加靈活,既能夠經過編程的方法來實現,也能夠直接用Hive進行SQL操做。函數