Hadoop上的数据处理应用一般使用Map-Reduce模型。
一个Map-Reduce作业通常会把输入的数据集拆分成许多独立的数据段,按照完全并行的方式一个map任务处理一段。框架把map的输出排序,然后作为reduce的输入。通常输入和输出都储存在文件系统。框架负责调度、监控任务的执行以及重启失败的任务。
Map-Reduce应用可以指定输入输出的位置,并提供了map与reduce功能的实现,体现在Hadoop中是Mapper 和Reducer.这些只是作业配置的一部分参数。Hadoop客户端提交作业(jar或者其他可执行的程序)和配置给JobTracker,而JobTracker负责把程序和配置分发到各个slave,调度和监控任务的执行,并返回状态信息给客户端。Map/Reduce框架的处理是基于<key, value>这样的键值对,也就是说,框架吧输入数据视作一系列<key, value>键值对集合,然后产出另一些键值对作为输出。
这是 Map-Reduce应用的典型数据流
绝大多数在网格上运行的Map-Reduce应用都不会直接实现较低层次的Map-Reduce接口,而是借助于较高抽象层次的语言,例如Pig。
Oozie 是一个非常好的网格上的工作流管理和调度方案。Oozie 支持多种应用接口 (Hadoop Map-Reduce, Pig, Hadoop Streaming, Hadoop Pipes, 等等.) 并且支持基于时间或数据可用性的调度。
这一部分是关于网格上运行的Map-Reduce应用的最佳实践
Hadoop Map-Reduce 为处理海量数据而设计。maps过程以一种高度并行的方式来处理数据, 通常一个map至少处理一个HDFS block,一般是128M。
网格模式: 合并小文件以减少map数量,在处理大数据集的时候用比较大的HDFS 块大小。
网格模式:确保map的大小,使得所有的map输出可以在排序缓冲区中通过一次排序来完成操作。
合适的map数量有以下好处:
上述指南需要注意,一个map处理太多的数据不利于失败转移,因为单个map失败可能会造成应用的延迟。
适当的使用Combiner可以优化map端的聚合。Combiner最主要的好处在于减少了shuffle过程从map端到reduce端的传输数据量。
适当的使用Combiner可以优化map端的聚合。Combiner最主要的好处在于减少了shuffle过程从map端到reduce端的传输数据量。
Combiner 也有一个性能损失点,因为它需要一次额外的对于map输出的序列化/反序列化过程。不能通过聚合将map端的输出减少到20-30%的话就不适用combiner。可以用 combiner input/output records counters(译者注:这是一个hadoop mapreduce 的counter名称,所以采用了原名未翻译)来衡量Combiner的效率。
网格模式:Combiners可以减少shuffle阶段的网络流量。但是,要保证Combiner 的聚合是确实有效的。
评论删除后,数据将无法恢复
评论(4)