阅读更多

16顶
2踩

行业应用

最近雅虎开发者博客发了一篇介绍Hadoop重构计划的文章。因为他们发现当集群的规模达到4000台机器的时候,Hadoop遭遇到扩展性的瓶颈,目前他们正准备开始对Hadoop进行重构。


Mapreduce面临的瓶颈


从集群大小和工作量中观察到的趋势是,MapReduce的JobTracker需要彻底改革,以解决其可扩展性,内存消耗,线程模型,可靠性和性能的几个缺陷。Mapreduce在过去5年框架不断的修复过程中发现成本在不断增加。目前Hadoop各个模块的紧耦合使得在现有设计的基础上继续改进变得举步维艰。这一点早已在社区内达成共识,所以他们正准备开始对Hadoop进行重构。不过从操作的角度来看,任何轻微的或修复Bug带来的巨大改动都会让Hadoop MapReduce强制进行全系统的升级。


下一代MapReduce构思


据该博客文章表示,新架构的主要思想是把原来JobTracker的功能一分为二:ResourceManager管理资源的分配,ApplicationMaster管理任务监控和调度。ResourceManager与原有的JobTracker类似,作为整个集群的控制中心;而ApplicationMaster则是每个application都有一个单独的实例,application是用户提交的一组任务,它可以由一个或多个job组成。每台slave运行一个NodeManager实例,功能类似于原来的TaskTracker。






1.层次化的管理


目前Hadoop的资源管理和任务调度都是在JobTracker中进行的,它需要复制所有task的资源分配和调度。而task是非常微观的调度单位,通常每个job都会产生成百上千个task,而系统同一时刻又会有大量的job同时运行,这让JobTracker的管理负担变得非常繁重。新架构将这一管理任务下放到各个ApplicationMaster,ResourceManager只管理每个application的资源分配。这样即使系统中存在很多application,ResourceManager的负担也能控制在一个合理的程度;这也是新架构最大的优势。


2.ApplicationMaster应该在Master还是Slave上运行?


新架构实际上将管理和调度的任务转移到ApplicationMaster上来,如果ApplicationMaster所在的节点挂掉,整个任务都需要重做。原来JobTracker可以跑在相对稳定的Master上,出错概率低;现在ApplicationMaster跑在好些Slave上,出错的概率就非常高了。而且新架构打破了原来简单的Master-Slave模型,节点之间的通讯和依赖关系变得更加复杂,增加了网络优化的难度。如果把ApplicationMaster全都放在Master上执行,则Master的负担会非常重(需要处理各种持续性的heartbeat和爆发性的如getTaskCompletionEvents这样的rpc请求),不过这个问题可以通过分布式的Master解决(Google已经实现)。


3.资源管理方式


原来单纯地以简单静态的slot作为资源单位确实不能很好描述集群的资源状况。新架构将更细粒度地控制CPU,内存,磁盘,网络这些资源。每个task都将在Container中执行,并只能使用其所分配到的系统资源。资源的分配可以用静态估计动态调整的方式实现。


4.支持其他编程模型


由于任务的管理和调度都由ApplicationMaster进行,ApplicationMaster又相对独立于系统的其他模块,用户甚至可以部署自己的ApplicationMaster,实现对其他编程模型的支持。这使得其他不大适合用MapReduce实现的应用程序也能在同一个Hadoop集群中运行。


可伸缩性实现


可伸缩性对当前的硬件发展趋势是非常重要的,目前MapReduce集群已经有4000台主机。然而2009年的集群中的4000台主机(8核心,16GB内存,4TB硬盘)只有2011年集群中4000台主机(16核心,48GB内存,24TB内存)一半的处理能力。此外,考虑到运营成本,迫使集群中运行6000台主机,以后可能会更多。


可用性实现


ResourceManager —— ResourceManager使用Apache的ZooKeeper实现故障转移。当ResourceManager失败时,可以通过Apache的ZooKeeper迅速恢复集群状态。在故障转移后,所有队列运行的应用程序都会重新启动。


ApplicationMaster —— MapReduce的NextGen支持为ApplicationMaster应用进行特定的检查。MapReduce的ApplicationMaster可以从失败中恢复,通过自身恢复到HDFS保存的状态。


兼容性实现


MapReduce的NextGen使用Wire-兼容协议(wire-compatible protocols)来允许不同版本的服务器和客户端进行信息交换。在未来的版本中,这一特性将一直保留,以保证集群升级后仍然兼容。


集群实现


MapReduce NextGen Resource使用常规的概念调度并将资源分配给各个应用程序。集群中的每台机器概念上都是由资源组成的,如内存,I/O带宽等。


支持其他的编程模型


MapReduce的NextGen提供了一个完全通用的计算框架,以支持MapReduce和其他范例。


该架构最终允许用户能够实现自定义ApplicationMaster,它可以要求ResourceManager的资源利用他们。因此,它支持多种编程,如MapReduce,MPI,Master-Worker以及Iterative models在Hadoop上。并允许为每个应用使用适当的框架。这对于应用程序(如K-Means, Page-Rank)在自定义框架外运行MapReduce。


结论


Apache的Hadoop,特别是Hadoop的MapReduce是一个非常成功的开源的处理大数据集的项目。我们建议Hadoop的MapReduce提高可用性、提高集群使用,并提供范式的编程架构以及


实现快速的发展。Yahoo将和Apache基金会一起将Hadoop在处理大数据的能力提高到一个新水平。

16
2
评论 共 4 条 请登录后发表评论
4 楼 lixingwang718 2012-02-27 13:10
Frankie199 写道
sunrie 写道
估计很少有企业能用到4000台以上的机器吧?
都没什么人关注回复啊!


不知道淘宝超过没有,他们有些人在研究hadoop...


淘宝不可能,现在yahoo是hadoop集群最大的企业,没有比yahoo更大的了。
3 楼 Frankie199 2011-02-25 23:25
sunrie 写道
估计很少有企业能用到4000台以上的机器吧?
都没什么人关注回复啊!


不知道淘宝超过没有,他们有些人在研究hadoop...
2 楼 Wallian_hua 2011-02-25 20:17
在这个云计算的时代,没有什么不可能的。。hadoop有必要去研究一下。。
1 楼 sunrie 2011-02-25 14:48
估计很少有企业能用到4000台以上的机器吧?
都没什么人关注回复啊!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • C# API函数大全,最多最详细的资料

    C# API函数大全,最多最详细的资料,C# API函数大全,最多最详细的资料

  • 使用C#调用windows API入门(一)

    2007-06-07 23:09:00 标签:C# windows API   [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chris.blog.51cto.com/112473/29285一:入门,直接从 C# 调用 DLL 导

  • C#调用API函数

    一、调用格式using System.Runtime.InteropServices; //引用此名称空间,简化后面的代码//使用DllImportAttribute特性来引入api函数,注意声明的是空方法,即方法体为空。[DllImport("user32.dll")]public static extern ReturnType FunctionName(type arg1,type arg2

  • 在C#中调用Win32 API步骤是什么?

    这里的 Win32API.MessageBox 调用了我们之前声明的 MessageBox 函数,显示一个简单的消息框。• 参数类型匹配:确保传递给Win32 API函数的参数类型和顺序与它们在Win32 API文档中指定的一致。通过上述步骤,你可以在C#中成功调用Win32 API函数,实现更多基于Windows系统的功能和操作。• 引用正确的DLL:确保在 DllImport 中正确指定了需要的DLL名称和函数签名。在声明了API函数后,你可以在C#代码中直接调用它们。

  • C#中如何调用WIN32 API[转载]

    api 函数是构筑windws应用程序的基石,每一种windows应用程序开发工具,它提供的底层函数都间接或直接地调用了windows api函数,同时为了实现功能扩展,一般也都提供了调用windowsapi函数的接口, 也就是说具备调用动态连接库的能力。visual c#和其它开发工具一样也能够调用动态链接库的api函数。.net框架本身提供了这样一种服务,允许受管辖的代码调用动态链接...

  • C#中调用API,介绍API的使用

    C#中调用API C#中调用API C#中调用API C#中调用API

  • API函数大全(转载)

    1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetCo

  • 在C#中调用windows API函数

    在C#中调用windows API函数

  • C#调用Win32 API如何处理指针类型的参数

    C#调用Win32 API如何处理指针类型的参数

  • 【ASP.NET Web API教程】3.2 通过.NET客户端调用Web API(C#)

    注:本文是【ASP.NET Web API系列教程】的一部分,如果您是第一次看本博客文章,请先看前面的内容。 3.2 Calling a Web API From a .NET Client (C#) 3.2 通过.NET客户端调用Web API(C#) 本文引自:http://www.asp.net/web-api/overview/web-api-clients/calling-a-we...

  • C#调用Win32 的API函数--User32.dll

    Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的。有时候我们之直接调用Win32 的API,可以很高效的实现想要的效果。CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/using

  • C# Win32API 模拟鼠标移动及点击事件

    这个函数在user32.dll这个库文件里面。我们可以在C:\WINDOWS\system32(XP系统)这个目录下找到这个文件,他是系统自带的。 我们以C#直接调用这个文件中的API为例子来说下怎么进行鼠标操作,首先在我们C#中声明引用,如果是一个基于From的程序,这个声明的位置写在你的From class就可以了 [System.Runtime.InteropServices.DllImpo...

  • C#中调用WIN32API函数

    http://www.pinvoke.net/   磐实文章站(首页)首页 >Visual Basic软件开发资料 > API 函数 http://www.panshsoft.com/Sort_VB/API_fun/   GetWindowRect用法 http://blog.csdn.net/coolszy/article/details/5601455 函数功能:该函数返

  • C#调用API函数示例

    通过调用CreateFile和ReadFile等API函数说明此问题,代码参考MSDN: http://msdn2.microsoft.com/zh-cn/library/2d9wy99d(vs.80).aspx usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceA...

  • C#面向对象与常用API的学习

    一:C#中的集合ArrayList using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 集合 { class Program {

  • C#调用win32API画图函数示例

    SelectObject和DeleteObject 函数 Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject函数,比如上面介绍的字体设置,就会用到这个函数。当你创建一个位图时,这时Windows就会在内存里分配一块内存空间,用来保存位图的数据。当你创建字体时,也会分配一块内存空间保存字体。如果程序只是分配,

  • 图解C# 调用Win32 API 示例程序

    先上代码;相关函数不解释;网上比较容易查到; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows

  • C#调用WinAPI部分命令

    C#是针对WIndows而生的,开发WIndows应用最快。然而想要让自己程序进阶,就不需深入Windows底层,WinAPI为我们提供了一把利刃。

Global site tag (gtag.js) - Google Analytics