MapReduce优化----宏观hadoop

Google提出了一个令人兴奋的架构。MapReduce把任务分解成小任务,这些小任务可以在普通PC集群上并行执行。这种架构的一种开源实现是yahoo!的hadoop。目前国内在用此架构的公司为百度,淘宝,腾讯等,国外Amazon,Facebook,New York Times等已在使用。

  目前,很多internet服务都具有上百万的用户。这些服务产生海量的数据,如何针对海量数据进行分析和处理是目前亟待解决的问题。

  Google提出了一个令人兴奋的架构。MapReduce把任务分解成小任务,这些小任务可以在普通PC集群上并行执行。这种架构的一种开源实现是yahoo!的hadoop。目前国内在用此架构的公司为百度,淘宝,腾讯等,国外Amazon,Facebook,New York Times等已在使用。

  MapReduce带来的关键性好处是它自动处理错误的能力。如果集群中的一个节点宕机,MapReduce讲在另外一台机器上执行任务。如果一台在执行任务的机器处理速度很慢,成为整个任务traggler,将会在另外一台机器上运行任务副本backup task,这就是推测执行。推测执行可以提高任务44%的速度。

  推测执行不是没有代价的。

  1. 对比各种资源,如网络

  2. 选择哪个节点来执行任务副本

  3. Straggler与平均速度的对比是苦难的

  Hadoop采用master/slaves的结构。出入文件存在于分布式文件系统中。Hadoop把每个job分为多个tasks,每个输入首先被用户定义的map函数map task进行处理,输出一系列key-value中间结果。当map任务结束后,执行reduce task。Slaves通过‘心跳‘机制来告知master自己是否有空闲,如果有,则会被分配一个task。这里对“心跳机制”进行简单的介绍:

  hadoop的集群是基于master/slave模式,namenode和jobtracker属于master,而datanode/tasktracker属于slaves。master只有一个,而slaves有多个。

  namenode与datanode之间的通信,jobtracker与tasktracker直接的通信,都是通过“心跳”完成的。

  心跳的机制大概是这样的:

  1) master启动的时候,会开一个ipc server在那里。

  2) slave启动时,会连接master,并每隔3秒钟主动向master发送一个“心跳”,将自己的状态信息告诉master,然后master也是通过这个心跳的返回值,向slave节点传达指令。

  Hadoop的调度:

  总体思路---

  a. 选定推测执行任务

  b. 选择能快速执行的节点

  c. 设置最高时限,防止超负荷

  推测执行的目标是最小化job的响应时间。响应时间对那些短任务特别重要。

  如果有节点有空的task可以执行,则从以下三种类型来选择一个task来分配

  a. 失败的任务,给予更高的优先级

  b. 为被调度安排的任务

  c. 需要推测执行的任务

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章