在Python里内建了Map和Reduce 函数,一开始怎么也看不明白,看图识也不明白。
直到看了”MapReduce:Simplified Data Processing on Large Clusters” link(面向大型集群的简化数据处理)这个论文来自GOOGLE.
Map(映射)Reduce(化简)
MapRedce 既是一种编程模型,也是一种与之关联的、用于处理和产生大数据集的实现。用户要特化一个map程序去处理key/value对,并产生中间key/value对的集合,以及一个Reduce程序去合并有着相同key的所有中间key/value对。
用这种函数风格写出的程序自动就拥有了在一个大的PC机集群上并执行的能力。运行时系统会负责细节:切分输入数据,在一组机器上调度执行程序,处理机器错误,以及管理所需的机器间通信。这允许不具备任何并行和分布式系统经验的程序员也能轻松地利用一个大型分布式系统的资源。
我们的MapReduce实现运行在一个大型PC机集群上,且具有很好的扩展性:一个典型的MapReduce作业运行在Google的集群上。
编程模型
计算过程就是输入一组key/value对,再生成一组key/value对。MapReduce库的使用者用两个函数来表示这个过程:map和reduce。
map由使用者编写,使用一个输入key/value对,生成一组中间key/value对。MapReduce库将有着相同中间Key I中间的value都组合在一起,再传给reduce函数。
reduce也由使用者编写,它接受一个中间Key I 和一组与I对应的value.他将这些value合并为一个可能更小的value集合。通常每个reduce调用只产生0或1输出value.中间value是通过一个迭代器提供给reduce函数的。这允许我们操作那些因为大到找不到连续存放的内存而使用链表的value集合。
Example:
1 |
|
map函数将每个单词与出现次数一同输出(↑例子中鸡蛋的那输出“1”)reduce函数将针对某个特定词输出的次数都合并相加。
另外,使用者要写代码填充一个符合MapReduce规格的对象,内容包括输入和输出文件的名字,以及可选的调节参数。之后使用者调用MapReduce函数,将指定到对象传进去。用户代码会与MapReduce库链接到一起。
实现
许多不同的MapReduce的实现都是可行的。选择哪一个要取决于环境。例如,一种实现可能适合于小型的共享内存机器,一种实现可能适合于大型的NUMA多处理器机器,而另一种则适合于更大型的联网机器集。
本部分描述的实现主要面向Google内部广泛使用的计算环境:大型的商用PC机集群,互相之间用交换式以太网连接。我们的环境是:
主要使用的机器为双核X86处理器,运行Linux系统,每台机器的内存从2GB到4GB不等。
使用的都是商用网络硬件设备——在机器层面上通常从100Mbps到1Gbps不等,但平均起来要比总带宽的一半少很多。
集群中拥有数百或数千台机器,因此机器错误经常出现。
每台机器都使用廉价的IDE硬盘来提供存储功能。我们使用一种内部开发的分布式文件系统来管理这些磁盘上的数据。这个文件系统通过复制的方法在不可靠的硬件之上提供了实用性与可靠性。
用户向一个调度系统提交作业。每个作业包括了一个任务集,会由调度器调度到集群内可用的一组机器上。
- 本文标题:python-map-reduce
- 本文作者:Roy
- 创建时间:2016-09-26 16:18:26
- 本文链接:https://www.yrzdm.com/2016/09/26/python-map-reduce/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!