【编者按】作为国内搜索巨头,百度收录全世界超过一万亿的网页,每天响应中国网民大约几十亿次的请求。那么,在面对如此庞大的数据处理时,百度是如何构建并优化分布式计算平台,又如何完成一次次系统构架的演进呢?在「OneAPM 技术公开课」中,百度的基础架构部高级技术经理朱冠胤根据自己的实践经历,对以上问题进行了详细阐述。
以下为演讲整理:
大家好! 我来自百度开放云大数据团队,2008年1月加入百度,一直在从事大数据分析和挖掘相关工作。目前我们将服务百度内部核心业务多年的 Hadoop 服务 BMR(BaiduMapReduce)、大规模机器学习服务 BML(Baidu MachineLearning)等正式对外开放。接下来我就跟大家分享一下 BMR 和 BML 为代表的百度大数据分析和挖掘平台演进历程以及在该领域的最新思考。
其实,如果涉及到「大数据」,不得不提百度最大的业务——搜索。百度搜索已经收录全世界超过一万亿的网页,每天响应中国网民大约几十亿次的请求。除此之外,百度还有另外20多个用户过亿的产品线,而且各个产品底层的大规模数据处理,都需要使用我们团队维护的大数据处理平台。
百度分布式计算平台:离线引擎优化
关于MapReduce
首先介绍主要的离线计算模型—— MapReduce,百度从2007年开始引进 Hadoop 0.15.1,随后快速发展,2011年百度的 MR 单集群规模达到5000台,到2013年已经多达1.3万台,这也是截止到目前为止全世界最大的单集群。Hadoop 全集群规模为10万量级, 作业量达到了百万量级,日均 CPU 利用率超过80%,远超业界同行,百度开放云底层依赖的大规模集群调度、资源隔离等技术能力世界领先。除了在规模方面不断扩大,我们一直在 Hadoop 性能分析方面进行了大量的优化。2013年的测试结果显示,百度内部 MR 实现相比于开源 Hadoop 性能提升30%。典型优化,例如 Hadoop 中的 Shuffle,我们将其做成一个统一的 shuffle 服务,不再占用 Map 或 Reduce 槽位。比如对关键热点函数采用 SSE 向量化等。
2014年,我们继续对计算引擎做了大幅优化, Native C++ 实现的 DAG 引擎正式上线。下图是一个 4轮 MR Job 实现的典型业务流示例,DAG 引擎上线后,可以优化成一个 DAG 作业,可以避免3次 Reduce 写多副本引入的磁盘 IO 及网络 IO,还可以规避2次 Map 读 HDFS 的 IO 以及处理耗费。
下图是一个真实业务由 SQL 计算表示层翻译下来的,基于 MR 引擎时,SQL 会翻译成25个 MR JOB,如果我们把它优化成 DAG,能够避免很多次磁盘 IO 操作。在优化之后,运行时间直接缩减到1个小时,优化前后的差异非常显著。
内存流式 Shuffle
2014年,我们对 Shuffle 进行重大重构,初期实习生同学完成的 Demo 以BaiduSort 名义参与了2014年 Sort BenchMark 大数据排序国际大赛,并获得冠军(2015年百度没再参加,国内其他公司以同样技术通过更大规模集群刷新记录)。2015年,新 Shuffle 技术完成全面上线。Hadoop 默认 Shuffle 实现为基于磁盘 Pull 模式,计算过程显式分成 Map、Shuffle、Reduce 过程;Baidu 研发的新 Shuffle 采用内存流式 Push 模式,Map 端完成部分记录处理后直接从内存中将计算结果推送给下游。
举例来说,Map 处理256MB输入数据,在内存流式 Shuffle 模式下,处理完100条记录以后,直接通过内存推送到下游,这样就形成流水线方式处理。不再有显式的 Shuffle 阶段。
目前,该 Shuffle 组件为通用组件,正逐步推广到其他分布式计算平台中。
百度分布式计算平台:系统架构演进
前面重点介绍了百度开放云 BMR 服务中涉及到的规模、性能方面优化思路和效果,接下来跟大家一起分享一下,我们遇到的整体架构方面挑战以及优化思路。
2012年系统架构中,最主要的两个离线计算平台,左边是以 MapReduce 模型为主的批量计算平台 BMR,右边是 MPI /BSP 模型为主的大规模机器学习平台 BML。从最下面可以看到,MapReduce 和 MPI 模型底层硬件就有较大差异。Hadoop 分布式文件系统多副本以及强大的故障处理机制,使得 Raid 卡完全没有必要,采用多块超大容量 SATA 硬盘非常适合。
而 MPI 差别较大,MPI 是一个消息传输框架,它在设计之初就没有考虑太多异常处理,因此它对底层系统可靠性要求非常高。百度采用了非常高配置的服务器,例如带 Raid 卡的 sas 硬盘,超大内存、万兆互联等。
BMR Hadoop 由大量 SATA 硬盘的服务器构成,存储系统为 HDFS,资源调度层面百度有自研的调度器 ARK(与社区 Yarn 比较类似)。而 BML 大规模机器学习平台上,支持的业务样本超过数百亿计量级,特征规模也远超百亿。我们在运行机器学习时,需要先启动 MapReduce,然后再将数据从 HDFS 分发到各个 MPI节点,这种方式对网络带宽的要求很高。
系统部同事持续改进内网带宽的同时,BML 平台层面也在思考应该如何解决跨 MR 和 MPI 俩大集群间的日益严重的网络带宽问题。
另外还有一个需求:MPI 是一种事务性调度模型,比如一个业务需要200台机器,如果平台此时只有199台机器空闲,实际也很难用起来(除非修改提交参数,但涉及输入数据重新分块处理等比较复杂)。另外 MPI 计算往往显式分为计算、传输、计算等阶段(即 BSP 模型),因此资源利用波动性较大,例如 CPU 计算阶段,网络空闲;网络传输或全局同步阶段,CPU 空闲。为解决这个问题,我们在 MPI 集群中引入IDLE 计算,IDLE 业务资源占用充分可控,典型的 IDLE 任务如 MapReduce 任务,而执行 MR 任务又会进一步加剧 MR 集群和 MPI 集群间网络带宽问题。
基于以上考虑,我们正式讲 MPI 底层硬件替换为替换成高配置存储型服务器,硬盘同构,文件系统都采用 HDFS,BML 算法输入和输出均通过 HDFS,不再是本地文件系统。
BML 机器学习执行引擎层面,我们基于 MPI 封装了 DVCE(Distributed VectorComputingEngine)分布式向量计算引擎,屏蔽 MPI 过于低层的编程接口,通过高层抽象自动翻译为 MPI 任务,这就是百度第二代专门针对「并行计算」开发的系统框架。
2014年,BML 机器学习执行引擎迁移到 ELF 第三代并行计算框架, ELF 采用ParameterServer 架构,大幅降低机器学习算法开发代价,对比于百度的第二代框架DVCE,在开发效率方面有大幅度的提升。离线计算方面,完成了 Native C++ DAG 引擎上线,百度内部叫 DCE(Distributed ComputingEngine)。
2014年 BMR 和 BML 底层都采用 Matrix 完成资源分配与隔离,其他平台如小批量计算系统 TaskManager 和毫秒级计算延迟的 Dstream 系统,都基于业务需求特殊性,采用独立的资源隔离和调度系统。
2015年的架构改进,主要是将所有的计算模型均迁移到 Matrix+Normandy 架构。 Normandy 兼容社区 Yarn 调度接口,开源社区新型兴计算平台可以很轻松的接入到百度的计算生态里。
我们已经介绍了百度大数据分析和挖掘平台主要的底层引擎和架构,接下来谈一下最新思考。
系统底层是IDC硬件,接着是 Matrix,再是 Normandy,然后是几个主要的引擎。之前介绍底层架构的统一,比如在硬件、调度、存储等方面的统一。实际上各个系统对外的结果,都有自己的接口,如果要使用 MR,很多人写 MR 程序都是直接调用 Hadoop 原生接口,配置涉及到的多个参数。部分业务还需要流式系统完成日志清洗,在经过 MapReduce 模型批量预处理,随后通过 ELF 完成机器学习模型训练,最后再通过 MapReduce 模型完成模型评估,可见一个业务需要跨越多个模型,需要业务线同学同时熟悉很多模型和平台,而每一个模型又有各自特点和接口。只有足够了解模型的细节和接口后,才能真正的利用好该模型。
于是我们正式立项 BigFlow 项目(原项目名 DataFlow,图片未来及修改),将模型的细节屏蔽。平台自动决定选择合适的并发度,甚至智能选择应该把这个翻译到哪个计算模型。BigFlow 可以支持多个不同的计算引擎(每个引擎在其适合的领域做到极致),充分发挥各引擎性能和功能。所以用户使用同一套接口,便能对应到不同的任务。由于采用高层抽象,业务开发效率获得大幅提升,代码量大幅减少,其维护成本也大幅降低。BigFlow 集成常见优化手段,因此将大幅提升平台有效资源占用。
百度开放云——大数据+智能
最后,向大家简要介绍百度开放云。2014年,百度正式决定将服务内部业务多年的云计算技术正式对外提供服务。百度开放云大数据方面,BMR 已经对外开放,而更多的大数据分析和服务都还未对外开放。BMR 集群上可以做到按需部署,用户专享,更关键的是完全兼容开源的 Hadoop/Spark 平台,开放云客户基于 Hadoop、Spark、Hbase 等已经实现的大数据业务几乎不用修改就可以平滑迁移到云上。多维分析服务 Palo,它完全兼容 MySQL 网络协议,因此,客户朋友们熟悉的 Mysql Client 的工具均可使用。
同时,Palo 支持 JDBC、ODBC 的编程接口,如果已有程序采用的是 JDBC、ODBC,那么迁移成本几乎为零。最后看到它与业界主流的 BI 工具商业分析的工具对接的,比如 Tableau、Saiku、BIEE、R。
最后再介绍机器学习云服务 BML,BML 中提供的深度学习技术,曾获得2014年百度最高奖。BML 提供端到端的解决方案,里面提供的算法均服务百度内部业务多年,典型如网页搜索、百度推广(凤巢、网盟 CTR 预估等)、百度地图、百度翻译等。
使用开放云 BMR 和 BML、Palo 等,就可以立刻、直接享用与百度搜索同等品质的大数据分析和挖掘服务!
以上是本次演讲的主要内容,再简要跟大家回顾一下,首先与大家一起分享了百度分布式计算平台和战略引擎方面,我们所做的规模和性能方面的一些优化,之后主要探讨了百度在计算的系统架构里的演进。结合以上内容,最后简要介绍了大数据的产品和服务,希望能够帮助大家了解百度开放云大数据分析和挖掘服务,感谢大家!
关于朱冠胤
2008年硕士毕业于北邮,现任百度开放云大数据负责人,基础架构部高级技术经理;
2008年1月加入百度实习,作为国内首批 Hadoop 研发工程师之一,参与了百度 Hadoop 平台从无到单集群全球最大整个过程;
2009年开始作为负责人开始从无到有建设百度大规模机器学习平台,陆续参与了凤巢 CTR 预估、网盟 CTR 预估、大搜索 PageRank、机器翻译等核心机器学习项目。2014年8月,与其他部门联合研发的深度学习平台获百度最高奖;
2015年8年,带领团队完成的智能服务调度系统-Normandy 获得百度最高奖;
目前主要负责百度开放云大数据产品研发和推广,已上线国内首个云端全托管的 Hadoop/Spark 服务 BMR,国内首个机器学习云服务BML等;
技术情怀,OneAPM 公开课分享知识蜜饯
「OneAPM 技术公开课」由应用性能管理第一品牌 OneAPM 发起,内容面向 IT 开发、运维人员以及架构师群体。云集技术牛人、知名架构师、实践专家共同探讨技术热点。未来,我们希望为开发者和架构师搭建一个知识分享和交流的平台,开发者和架构师可以从中获取方法论,也能从实战经验的分享中受益。OneAPM 技术公开课还会在深圳、广州等城市陆续开讲,期望在「性能与架构」领域引领一次新的升华和飞跃。
染头发
聚一聚……
染头发
教育局……
你好
嗯讲得一般……
星雾
Lambda表达式的条件限制很多,应用面不多,我不知道是否应该要花时间来掌握这个表达式,求解……
修道小仙
感谢分享,来龙去脉,深入浅出,非常清晰……
小布丁
写的棒棒哒……
小布丁
写的真可以……
wuxin
受教了……
爱码物联
博客使用……
yancy_01
很喜欢文字的描述,特别是理论性质的,相比于代码,理论知识更加有意思,谢谢分享……