时至今日,“Big data”(大数据)时代的来临已经毋庸置疑,尤其是在电信、金融等行业,几乎已经到了“数据就是业务本身”的地步。这种趋势已经让很多相信数据之力量的企业做出改变。恰逢此时,为了让更多的人了解和使用分析大数据,CSDN(微博)独家承办的大数据技术大会于今日在北京中旅大厦召开。本次大会汇集Hadoop、NoSQL、数据分析与挖掘、数据仓库、商业智能以及开源云计算架构等诸多热点话题。包括百度、淘宝、新浪等业界知名专家与参会者齐聚一堂,共同探讨大数据浪潮下的行业应对法则以及大数据时代的抉择。
以下为文字实录:
今天我给大家讲一下MapReduce的框架,这主要是我们自己实现的一个框架,基于C++能够提升资源利用率的一个框架,简称HCE。首先我做一个大概介绍。我做分布式大概有6,7年的时间,刚才刘主编也说过,上Twitter每秒要处理上百万条数据。当然这不是我今天演讲主题,像FaceBook处理每天海量数据,要存储这些数据需要利用到快存储。在传统快存储上要做简单的索引,所以就利用到一些把非结构化转变成结构化的一些工具。在基于这些上面,他要做一些计算,而分布式计算大概分为两个,一类是批量分布式计算,MapReduce是最典型批量计算。有一部分衍生品,像机器学习,有很多迭代性计算,为了高效会有一些延伸。还有现在雅虎说的MPI,是因为MapReduce现象还是计算,而MPI是面向通信,对一些数据挖掘,机器学习方面的东西有不同的模型。
今天我讲HCE,是基于MapReduce的一个扩展。这个HCE框架,本身也是一个开源软件,一年前我们就作为有所涉及。今天我讲的主要分四个部分:Backgroundand Motivation,性能评估,总结。
第一方面我们介绍三部分,现状,遇到的挑战和一个简单解决方案。为什么要提出HCE这个框架呢?首先,我们用集群一般会考虑几方面问题,我们希望集群是容易控制的,这些都是成本问题。第二,我们需要考虑集群的高效性,因为对于百度来说,前阵子一个分会上雅虎公布他最新的数据,雅虎每个月大概有500万个作业,他节点数应该超过5万,每天处理的数据量是超过200PB。百度我们每天有5万个作业,超过总数有1万5千个节点,每天要处理10TB的规模,而且这种规模的扩展是每天都在递进的。作业每天都会增加100、200,数据存储也可能每天以零点几或1%的速度在递增。面对这种不断数据爆炸性的增长,我们需要用合理的手段去控制他,以及我们能够高效利用整个集群的一些资源,而不至于资源浪费。如果能节省一些成本,按现在机器性价比来说,现在一般大存储的机器一般是2到3万,就算定制高性能,大概也是在5万块钱以下。如果你能省10%的成本,就能为公司节省上千万的财产。所以说,技术上的一个小缺口,可能给公司带来很大的收益。
HCE目标有两个方面,第一,需要提升整个集群使用效率;第二,附加价值给开发者一个更好的开发接口。面对的挑战,提升集群资源利用效率,业界一般有几种做法,最典型是做以兆级优化,一个是资源调度。换句话说,主要是在资源调度上有大的改进,传统调度是每次作业就是两阶段来提交,其实MapReduce不能准确进行描述,还有存储等等。所以,新的MapReduce2.0会把这些资源调度描述更细,他通过分配的一些算法,一些资源分配来描述每一个作业真正需求,真正能够把作业力度切到更细,这样整个集群资源使用率也会提高。
第二种方法是Task optimization。因为用户提交一个作业,集群是不知道用户什么配置。大家都了解,一个作业可能需要上百个配置,而这些配置用户怎么能正确配置好,而且很多用户他是不愿意去配置的,即使是在公司内。如果在平台方看来就需要做一个动态,这块是比较难做的。我刚才说的这些都是业界传统一些优化方法,当然这些传统方法我们也做了。我们有一些另辟蹊径,每一个作业被切成多个来运行,实际上作业执行效率,除了调度期快慢以外,还取决于单机执行。
而Task的优化很多人是不去关注的,我们在这里分了一下Task,什么叫small tasks?什么是big tasks?如果用户作业是零就由框架来占,什么是用户开销是零呢,如果用户没有做任何结算,你数据流也要流过整个框架,管这种作业叫small tasks,用户就没有其他额外的工作,这就是一个small tasks。而做一些工作你会发现这一个small tasks会跑的很快,会在几十秒内结束。对用户程度比较重,用户需要做迭代,需要做复杂的的操作,这个任务会执行很长,会几分钟,甚至几十分钟。
总而言之,我们把那种用户,用户定义的很简单执行时间很短的任务我们称为small tasks,对于哪些用户在营销里面进行大量的,大家都知道这是一个主要因素,我就先指出这里面有复杂计算逻辑而且执行很长时间的我们就叫big tasks。
对集群做一个统计,因为你抽象为要抽象small tasks和big tasks,我抽取四个主要因群来看的话做一个统计,统计的标准是什么呢?这个tasks到底执行多长时间,不是一个作业,而是一个tasks,tasks是作业切分之后,平行化之后在电极上执行的任务叫tasks。通过4个集群统计会看到,超过80%作业,其实他本身任务都是小于2分钟就完成的,而且应该是超过75%都是在一分钟之内完成。
因为本身这是符合逻辑,你的集群跑到一个公有计算平台,一定是轻量级。大家都了解机器学习里面有一些复杂的迭代性算法,相关有一些MPI五做的这些东西是处理那些复杂计算逻辑。一般统计无非是操作,都是很轻量级这是符合逻辑。比如任务都是小于1分钟,而且你要跑Map的时候就需要知道,我们统计得出Map数据基本上是Reduce数据量倍,这样数据量会大幅下降。一般根据FaceBook统计结果,平均有5到10倍介绍,你输入假设100倍,收入就是10个,Reduce是很轻量的,你能大幅提升Map,因为你的大头在Map,这一个发现。
换句话说,本身对于那些轻量级的。第二点对于用户来讲,在国内大部分人使用写CDI出身,让你能够实现多语言支持,你可以写C++,可以写各种脚本,说白通过管道,通过pad通过STD,把数据传给JAVA进行执行。这样的话有一个问题,用户作业是独立于你框架,你框架只干了一件事就是把用户任务启动起来让他执行,看整个框架是怎么编译优化。有人说我框架不需要关注这个东西,因为很多用户,比如说用户在编制程序的时候不去加JAVA,或者用户用低版本,本身学过编译的人都了解,编译的好坏,编译手段不一样,也会产生影响。
推荐阅读
时至今日,“Big data”(大数据)时代的来临已经毋庸置疑,尤其是在电信、金融等行业,几乎已经到了“数据就是业务本身”的地步。这种趋势已经让很多相信数据之力量的企业做出改变。恰逢此时,为了让更多的人了解和使>>>详细阅读
本文标题:百度杨栋:HCE助MapReduce提升资源利用率
地址:http://www.lgo100.com/a/kandian/20120305/36929.html

网友点评
精彩导读
科技快报
品牌展示