阅读更多

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台以上的机器吧?
都没什么人关注回复啊!

发表评论

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

相关推荐

  • 7个步骤玩转C#下的Windows API:用户界面开发从未如此简单

    Windows API(Application Programming Interface)是微软Windows操作系统提供的一组函数和接口,用于与操作系统进行交互。通过调用这些API,开发者可以实现系统级的功能,如文件操作、进程管理、图形绘制等。在C#中,我们可以通过P/Invoke机制调用这些API,实现更底层的功能。

  • 在C#中调用windows API函数

    在C#中调用windows API函数

  • C# WebAPI

    Encoding encoding = Encoding.UTF8; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.Accept = "text/html, application/xhtml+xml, */*"; requ...

  • C#Winform中通过RestSharp调用Java的Restful接口的常规操作

    C#Winform中通过RestSharp调用Java的Restful接口的常规操作背景Restful API接口发布在C#中使用RestSharp调用Restful API使用RestSharp调用Get接口在C#中使用RestSharp调用Post接口在C#中使用RestSharp实现文件上传在C#中使用RestSharp实现文件下载 背景 由于Restful协议格式的API接口越来越流行,作为异构系统的便捷集成方式,在不同编程语言中如何方便的发布和调用Restful接口成为了各为码神必备技能之一。 R

  • WinForm应用界面开发实战 - 如何在混合框架中整合外部API接口调用

    本文将为大家介绍在Winform混合式框架中如何整合外部API接口的调用,欢迎持续关注我们哦~

  • C#调用API函数

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

  • C#调用windows API的一些方法

    使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1. 直接调用从 DLL 导出的函数。 2. 调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法。 2.将 DllImport ...

  • API函数大全(转载)

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

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

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

  • 在C#中调用windows API函数实例

     在C#中调用windows API函数对于windows 系统API函数的调用在程序设计中有时是必不可少的,各种编程语言都规范了调用的方法和接口,在C#语言中的调用方法如下(以下编程环境为Visual Studio .NET):1、 在工程项目中添加一个类新项,打开这个类文件,在文件头部加入对以下命名空间的引用:using System.Runtime.InteropServices; 在类定义

  • C#中调用Windows API

    在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助.另外如果安装了Visual Studio .net的话,在C:/Program Files/Microsoft Visual Studio .NET/Fram

  • 用Visual C#调用Windows API函数(转)

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

  • C# windows API 隐藏窗体

    void huode()         {                        while (true)             {                     IntPtr ParenthWndldsl = new IntPtr(0);             IntPtr EdithWnd = new IntPtr(0);

  • 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 函数功能:该函数返

  • Windows系统调用学习笔记(一)—— API函数调用过程

    Windows系统调用学习笔记(一)—— API函数的调用过程前言Windows API实验:分析ReadProcessMemory第一步:定位函数第二步:开始分析 前言 一、学习自滴水编程达人中级班课程,官网:https://bcdaren.com 二、海东老师牛逼! Windows API 描述: Application Programming Interface,简称 API 函数。...

  • WinForm 对Web Api 增 册 改 查 的基本操作

    WebApi代码: public class ValuesController : ApiController { Entities db=new Entities(); // GET api/values public IEnumerable Get() { ret

Global site tag (gtag.js) - Google Analytics