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操做。函数