百度基础架构部马如悦:我的Hadoop… – nuoline的专栏 – 博客频道 – CSDN.NET

马如悦:大家下午好,我是来自百度基础架构部高级工程师。我先自我介绍一下,我是咱们中国第一批用Hadoop,后来转向开源,从开始到现在一直用Hadoop,在这里说一下自己的体会可能会对大家有用。

今天讲一下百度Hadoop做的怎么样,原来讲的是基础性的东西。以前我善于听完以后发表一我下自己的看法,比如今天是云计算技术交流会,讲B2C,讲大规模互联网架构,我听完刚才一直在想到底Hadoop跟云计算有没有什么问题,规模算不算大。今天觉得B2C和云计算有什么关系,今天让我感受特别深的,无论是刚才麦包包、凡客、京东,我觉得最大的特点你看他的店商架构差不多,类似这样的架构每个电商都这样做,都在召人。在座各位有很多是负责电商系统架构的。有必要的话大家可以创立这么一个公司,把所有底层技术,大家都是差不多,可以做成商品卖给电商公司是可以的。因为对电商公司来说他们更注重是业务,这种技术的方法我看CTO怎么样,如果你请CTO想通过产品来证明他的能力,有有点过了,但是他想通过问题找到解决的办法,这是找到好的CTO。

当当我问过他克服,我说这个产品我不太喜欢,我想退,他说这个不是我们的,他是借我这个平台销售,我从此不再卖当当的东西。京东为什么会成功,他的速度非常快,客服非常好。从此不再去淘宝买东西,我的工作整个组不再去淘宝买东西了。电商企业在这里谈这个事情,我腾赞赏凡客同事说的话,对电商企业来说成功的关系因素太多了,可能技术是最次要的,这是我的观点。

现在互联网异常火热,IPO越来越多,各大公司不断扩大规模,薪水不断提高,这不是一个好现象。

百度从07年开始使用Hadoop做一些离线处理,刚才大家讲的是线上处理的业务。百度利用Hadoop是线下,也有半线上,百度会用哪些半线上的待会举例子说明。

我们可能是先使用,未来我们发展百度规模是1万多台机器,现在是压力最大集群,超越雅虎和Facebook。百度大约使用1.1万台数据,雅虎是第二,现在是3.8万台数据,Facebook差一点。当然百度规模在这个地方,百度规模上了之后Hadoop在经过五六年发展之后,走到一个叉路口,如何走到下一步。Hadoop下一步要做什么,大家都在研究。

Hadoop大规模离线系统下一步要解决Hadoop在第一代遗留两个问题,就是扩展性、可用性的问题。今天跟大家讲讲扩展性。Hadoop全部社区人力如何使Hadoop继续扩展。当前在百度,Hadoop规模扩张能力大概是在三千到五千台左右。在下一步我们像百度要求的话,领导给一些指标在今年年底我们要单批要一万台,明年可能要到两万台,这是百度的高速增长。这种情况下Hadoop提供不了,包括雅虎和Facebook他们也受到了这样的影响。Hadoop2.0主要是解决这几个相当于Hadoop主节点的Scalability的问题。Scalability现在的问题,有3000多万文件,内存占用12GB。如果扩张10亿文件,内存占用380GB。负载的话,集群规模扩大后,这种压力是3000台左右。

谈到这个地方,谈到分布式文件系统以及分布式存储在业界的做法,现在做的比较好的几点,随即、轮询等、各节点平坦存放INode信息。现在比较火的一个东西就是Saife(音译),第一他有一套创新的架构设计,比谷歌好很多,都代表他是各大公司不得不提前准备的东西。Saife的理念非常好,整个做存储,信息量很多,不了解存储在百度是怎么做的。我们是这样划分的,可能在最底层我们有一个分布式块式的东西,原来磁盘抽象单机的话,原来磁盘硬件厂商卖给你是一个块式的,你可以直接用,你很牛可以用硬盘直接插可以访问你底层硬件,买驱动是可以用的。后来我们用的不好,后来随着规模增加,单机做不了了,存储区域网络也是一个块式,插到磁盘阵列也是一个块式。随着互联网出现第一扩张规模非常差,比较专业,后来出现一个分布式块式存储。文件系统要求再高了,大家用NASS来采用,也是跟区域网络差不多,磁盘阵列也是专用的。

像亚马逊的S3(音译),文件系统最大的问题就是扩展性,完全取决于他的树状结构,扩展起来相当困难。这张列表上看到所有人都带努力解决就是他树状目录扩展。亚马逊解决存储服务的时候,抛弃了树状,采取了很平坦的结构,对象存储的概念。S3对象存储概念,使得亚马逊支撑对象数可以支撑上千亿,是现在最大的存储集群。咱们现在很多硬件包括磁盘厂家试着对象存储,你不再关心块的分配和列表之间的维护,他可以直接下去。他不需要树状结构,比如在百度图片存储、MP3存储,PPT存储不需要一个树状结构。

我们看存储一般分为块式存储,做云计算公司挂在一些虚拟机,挂到本地作为本地系统。上面还有分布式对象存储,很多用来存储像淘宝图片都是用分布式对象去存储。上面是分布式文件系统可以做很多工作,用户应用起来会好很多,但是他的扩展性会差很多。

这是社区Hadoop2.0方案,公司起步的话糙一点没有关系,到了像百度这种公司再去一个系统决策的时候花很长时间去决策。再像咱们很小的B2C企业在前期你花很长时间做这种决定,一定脑子有问题。像Facebook他们用的是最简单系统,用脚本去搞,但是他的商业模式成功再去搞不可用。社区是雅虎一贯做的东西,糙的很。雅虎也遇到Hadoop的文件系统的原数据节点的扩展性问题。他怎么解决,他研读了谷歌模式,谷歌也是租过来,大在很中期的时候05、06年的时候,他遇到这一点,谷歌说我在上面,把上面流量平均,你是哪个部门,哪个产品架构放到哪个集群上。不好用是有的产品数据多,有的产品数据小,各个分布不均。介绍了单集群数据结构,像做自己的硬盘,单硬盘存储不了那么多文件,多硬盘你要自己承担把什么文件放到哪个文件上,负载高了你自己承担。谷歌做了这样的决定,我要把北京所有块分成组,哪个组归哪个文件系统。

这是我们自己的方案,在百度已经用的方案,总体对我们存储的设备思想。拆分了两层,我们拆成底下对帐管理层,一个用户把一个数据推到上面之后可以给他一个唯一标识,对应什么他自己很清楚。他给自己编一个号,1、2代表什么他可以记到脑子或者是笔记本里,这个过程是五花八门都有。用户也有自己的选择,这层做的反而是扩展性难做,底下对帐管理层做的还比较简单。他的特点就是文件对象管理服务可以做到水平扩展。上面可以实现多种管理,实现文件系统,实现S3的。底下的Name

Space全到文件对象管理里面,到逻辑对象里面他的负载降了很多,他的未来做扩展性就非常好做了。这里提的分布式对象存储就是S3。S3特点是什么?就是第一没有树状的命名空间,二层命名空间,OB

Ject,他是从几KB到几GB都可以支持,另外一方面他REST

API。可以把任何一个对象作为资源放到REST。这是我们现在实现单节点的树状命名空间,S3这块是正在实现的。这是我们从线上评估出来的负载。内存10亿文件,10亿块文件约66GB,目录约1GB。原来90多GB只支持1亿文件,现在66GB可以支持10亿文件。大规模耗能操作都被上到上面的对象管理层,是超水平扩展,那个没有压力,没有关系。而Namespace的只占13.7%。在全中国,除了百度和淘宝会接触这样规模的机器,别的公司可能很难到这个规模。

百度遇到什么问题呢?我们CPU调度3000-5000台左右,发现整个单点调度觉得CPU跑不动了,整个发现会闲着,在百度2000万需要100GB内存。刚才为什么说Hadoop并发度那么低,不太理解。在百度每天跑的作业数几千万,平均一个作业可以按1000来算,每天处理量也是6TB左右。整个百度几乎80%日志是在Hadoop分析的。淘宝也有做ORAP(音)用的数据库系统来存储大家交易什么东西,但是他所有数据都会定期从线上抓到Hadoop上去用Facebook的系统做ORAP的挖掘。他也是在做类似BI的事情。

有一次我和同事们聊天仔细研究了一下什么最吃香?互联网高速发展,什么是现在挖人最多,两个方向,第一个是分布式系统,大家看书可能多一些,有经验的人不多,必须经历过一些失败、灾难之后很多人有了好的经验跟大家分享。另外未来特别火,比分布式系统挣钱的地方就是知识发现,机器学习、数据仓库、数据挖掘、BI混到一块的东西是未来最比较火的东西。

随着数据量大,分布式系统可以进行整个数据量进行存储,海量数据如何提取好的信息。简单来说通过数据库做一些推荐什么的,举个例子,在百度类似的推荐有,百度出广告,很有学问,他会研究用户在什么情况下点广告比较多。百度会推一些需求,让用户点。广告有一个专业名词叫做CTI,也类似于经验系统,他后面挖掘分析的话是大量采用一些机器学习、数据挖掘,并且采用像Hadoop,学校里的高性能计算挖掘计算,并不是单单在数据中库上做的简单分析。据说,影响一条广告展现在的纬度上亿,旁边有哪些字体,背景什么颜色。他通过数据挖掘,对这个广告影响怎么样,去调整各个纬度系数,在用户访问,通过网站或者是访问百度的时候我们快速带上我们模型算,哪个跟我们关联度最高推出去,这是百度最近做的比较好。

我们做JobTracker-Scalability,我们的目标是简单实现高效,支撑10万节点,充分考虑未来需要跨机房部署集群的问题。咱们对电商比较了解,是不是可以联合组织,然后到前端把他的业务逻辑做了,其他都不管了。这种我觉得他未来还是有机会的。像在中国,像在机房谈,有时候做电信脑子不那么快。我们和一些电信、联通探讨的时候他们的机房扩张规模远远赶不上百度这样超大公司的规模。你如果不去考虑跨机房、跨城市、自建机房,你基本上业务的发展就受到了限制。

我们的方案,咱们做一个系统自己最大的收获,这个新人进来的时候学的东西比我多,我压力大但是我经历很多事情,我有这些经验。雅虎在技术的最高点,比如说位置在现实之中是1%,他要扩大到百分之百。比如做计算,我们把一个很大的作业提交到一个集群上去,发现调度不了。雅虎怎么做呢?我要不断把这个能力再扩大。百度来说我觉得实现成本最低,可以解决位置信息,扩展规模无限大的东西。你本身咱们在现实生活中,原来公司就是一个小部门,这个部门扩展到1000人,你还要投到这个部门,不可能了。百度是发现这个规模大了之后把大拆成两个部门,一个工作来的时候一分为二,一个部门做一个工作,中间做一个很小的互联互通。这有什么好处呢?原来得到老是担心一个事情,正好拆分的话,一个部门做完了,一个部门还有资源空着怎么办,问题关键就是划分地域不均匀,你的规模比较小,造成一个集群下忙着个应用。像百度做的开始的话存储,把数据实际水平分摊到各个集群上去。计算的话分到各个集群依旧是均衡,并且可以做到无限扩展。这是我们的系统,我只是给大家大概讲一讲,这个系统的扩展性非常好。MapReduce的位置,比Map和Reduce独立调用,Map1000个槽位,Reduce也是1000个槽位,还有一个是Shuffle处理性能非常差,这要做一个优化。很多公司做过Hadoop,给我打电话问一个宗旨,集群规模是否越大越好,我现在想明白,对于好处是共享,资源充分利用。这个好处有前提,你有能力保证集群规模过大和所有人的位置。你底层的Hafs额的副本放置策略,Hadoop的放置策略是不是好的,不是的。百度有1000台机器,如果同时宕掉三个机器的话一定有副本丢失,我们随即从1000台机器里面挑三台机器,然后发现相同的块有三四个,正好有几个块的副本正好在机器上。这是HDFS不好的地方。比如1000台机器分成十个组,一个组100台机器,不要让他散落所有机器上。100台可以满足副本的负荷了。如果三个机器放到十个组里面任何一个组里面不会丢数据。但是对百度来说,一旦真丢数据,丢个10G、20G问题差不多,问题一样严重。平常三个副本宕机正好撞到在一个小组很少,大家回去研究研究这个东西,Hadoop现有放置副本不是最好,放置均匀库的时候,放副本的时候要随机的。

再一个就是层次化管理的思想,很多数据访问量比较频繁,写入读取比较频繁一定是最小的。要求时效性,你还要求一下子处理几PP数据,不太可能。我们放一些数据的话可以把最高级别,最实时响应数据分内存里面。咱们系统单机缓存结构一样,包括百度大家检索库也是一样的。如果一旦在某一层他满足你了,就不会再往下走了。很多库里的数据,经常访问只占20、30%,大部分不动了,不查、不更新。这时候需要用户访问模式,我们把经常不访问数据网站下放,经常访问逐步调上面去。层次化管理思想对大数据公司还是比较有用。

总体来说在不是那么专业会议上讲太专业的东西,大家可能听的没有激情,我也讲的不是特别有激情。我经常参加Hadoop在中国的论坛,那里很多都是专业人士,还有全国用Hadoop的,中国哪些公司在用?百度、淘宝、腾讯、网易,几乎全世界、全中国有50%的公司在用Hadoop,即使不用也应该了解一下,未来处理一些日志,做一些线上挖掘,做一些存储可能都对你有用,可以存很多事情。昨天听原来一个同事说像360也在大规模用这个东西,包括开源,他很好用。大家对Hadoop开源技术在中国有很多开源社区,类似这样的,大家可以尝试用一下。今天就讲到这个地方,主要是让大家对百度有一个宏观的认识,百度搞什么东西。百度搞得东西跟B2C搞得东西不一样。

总体来说这次演讲是我个人观点,我个人在百度分布式系统里面占很小一部分,百度整个架构库有100多号人。我们也会讲到一线系统整合,大家可以多了解一下。

提问:我是贾超,我有两个问题,你一直拿百度和雅虎做对比,对比就说您优势的地方,这里想问一下,您觉得这里面劣势的地方在哪里?是关于Hadoop的。

马如悦:只代表我个人观点,不代表百度,劣势的话我觉得雅虎看的比较清楚,做一个很深的基础架构,对雅虎来说自己定位不一样,他把搜索引擎改了和微软合作搞,他自己定义一个媒体平台,不是定义以技术为主的公司,技术对他来讲只是一部分。当Hadoop很有用的时候首先是他站出来支持Hadoop,如果是谷歌的话,不知道大家有没有看到谷歌在工作五年,离开之后对谷歌一顿痛骂,他不鼓励创新,不用他的就不让干活。谷歌觉得他的技术很先进,不太可能让你用外面的东西。雅虎定义就是说我是媒体性公司,所以Hadoop是很开放,Facebook也是这样,百度不是。百度在全中国组技术人员最高就是百度,自己技术比较优秀,这是一个优点,他一般对开源系统,他想对技术上有所突破。我觉得百度和雅虎,从我的观点来看,我们使用开源上会比别的公司有点害怕或者是有点瞧不起开源。小公司无法选择,大公司不是这样的,公司大到一定程度什么东西都自己搞,这个不太好。

提问:这是在应用上面一个框架,百度使用Hadoop环境中对操作系统,保证基础设施上面硬件是否有技术性要求?

马如悦:硬件我们是采用大的存储机器,两到三万块钱,12TB,12个1TB硬盘,内存就是32GB差不多,没有采用一些很高端的机器。百度随着规模扩张之后,他发现机器成本很高,高在什么地方?电源、散热系统,还有一些设备是不需要的,百度近几年自己走定制化道路,把整个服务器成本降下来。百度规模太大之后,每个上面多了一块卡2000多块钱我又用不到,对我们来说意义不大。服务器百度是普通的PC服务器,好像在京东可以买到。

昨天我还和360同事聊天,本来我的心里认为,我一直不明白360为什么有那么大数据量处理,他有这套系统。一般是SaaS硬盘,那是最好的,再差点就当笔记本用了。百度也有很多机器用SaaS硬盘,普通机型足以了。

来源URL:http://cache.baiducontent.com/c?m=9d78d513d99312f40eaa837e7c4c84304409c2777b978e1a2592d50a8465285c5a36bde67235107382842a3b16af3e00bdb62b2e705e7eecc79f95199dfdc97971df3a62275ad51a4c9204a5cf4527c52197&p=87759a45d5c55fb11eb8c7710f4385&newp=973bd116d9c111a058ee9239454d8a231610db2151d4db17&user=baidu&fm=sc&query=baidu+hadoop&qid=edb6740c0002c300&p1=2