xdays

Python写MapReduce

说明

本文以一个没有Java开发经验的运维角度从宏观上去理解Hadoop的云计算(也就是MapReduce)框架模型的一些思想和运行流程;主要目的是在对MapReduce有一定了解后能用Python通过streaming工具来写MapReduce。

MapReduce工作流程

如下图所示:

MapReduce Flow

概括整个过程如下:

  1. 客户端启动一个作业;
  2. 客户端向JobTracker请求一个job id;
  3. 客户端将运行作业所需的资源复制到HDFS上;
  4. 客户端将作业提交给JobTracker;
  5. JobTracker初始化作业对象,获取输入数据进行拆分作业;
  6. JobTracker与TaskTracker保持心跳,将子作业下发给TaskTracker;
  7. Tasktracker从HDFS获取数据进行MapTask和ReduceTask

具体的流程介绍可参考这篇文章或者《Hadoop权威指南》

Shuffle机制

Shuffle意思是洗牌或搞乱,在整个MapReduce工作流程中Shuffle指的是map开始之后至Reduce完成之前的这个环节。理解其内部运行机制后,你会对那句形容Shuffle的话理解更深刻:排序是Hadoop的灵魂。

具体Shuffle的介绍参考这篇文章,好文,作者分析的通俗易懂,这里鄙人表示感谢。

MapReduce数据流

理解数据流对写MapReduce很重要。总结来说就是:数据始终以key/value形式从input流向output,在input端map有相应的转换方式定义如何将数据转换为key ...