MapReduce是一种编程模型,用以大数据量地批处理计算。
- MapReduse的思想——Map & Reduce
MapReduce的思想是将批量处理的任务主要分成两个阶段(Map和Reduce阶段),所谓的Map阶段就是把数据生成“键-值”对,按键排序。中间有一步叫shuffle,把同样的key运输到同一个reducer上面去,在reducer上,因为都是同一个key,就直接可以做聚合(算出总和),最后把结果输出到HDFS上。对于应用开发者来说,你需要做的就是编写Map和Reduce函数,像中间的排序、shuffle网络传输、容错处理等,框架已经帮你做好了。
- MapReduce使用场景
JobTracker:这是主节点,只有一个,它管理所有作业,作业/任务的监控、错误处理等。它将任务分解成一系列的子任务(Map任务、Reduce任务、Shuffle操作),并分派给TaskTracker。
TaskTracker:这是从节点,可以有多个,它们接收来自JobTracker的Map Task、Reduce Task和Shuffle operations,并执行。它们与JobTracker交互,汇报任务状态。
Map Task:解析每条数据记录,并传递给用户编写的map(),并执行,最后将输出结果写入本地磁盘(如果为map-only作业,直接写入HDFS)。
Reduce Task:从Map Task的执行结果中,对数据进行排序,将数据按照分组传递给用户编写的Reduce函数执行。
- MapRudece工具的使用
我们现在很少直接使用MapReduce框架来编写程序了,而是使用基于MapReduce框架的工具来编写,或者直接用Spark等工具来编写。
MapReduce支持C/C++、Java、Ruby、Perl和Python编程语言。开发人员可以使用MapReduce库来创建任务。至于节点之间的通信和协调,输入数据集的切割,在不同机器之间的程序执行调度,处理错误等,这些都有框架完成,开发人员无需处理。Map和Reduce函数会自动在多个服务器节点上自动并行执行。