推荐序一认识作者是在我加入蘑菇街以后,我更习惯叫他天火(作者在蘑菇街的花名)老师。天火老师当时就在做蘑菇街大数据平台的建设工作。知道天火老师之前在Intel是大数据开源社区的积极贡献者,也参与过不少大数据平台开源系统的开发,经验非常丰富。而一线实践者对自己经验的总结,则是非常宝贵的,因为在计算机的技术领域,只有自己经历过,才能积累经验和能力,所以这样的作品,非常值得读者一看。大数据这个词,看起来这两年没有早几年的时候时髦和流行。但是现在非常流行的人工智能技术首先就离不开大数据的支撑,而之所以现在大家不再像早几年那样张口闭口大数据,也是因为大数据已经逐渐变成普遍存在且对我们很有帮助的一个事物了。所以系统化地去介绍大数据平台的基础架构,可以帮助更多的人来了解大数据平台。作者在我们公司内网也会经常发表一些逻辑清晰、内容丰满的文章,所以当看到这本书稿的时候,我一点也不惊讶。本书的构成,作者在前言中已经介绍得很清晰了,内容可以说非常全面。而看到这些章节,都能让我想到在和天火老师工作中聊到和学习到的点点滴滴。而且我深深地觉得,天火老师确实是把自己工作中及业余时间在大数据平台领域的经验都毫无保留地贡献给了读者。而令我没有想到的是,本以为只是一本纯粹谈大数据平台技术的专业书,结果在最后一章作者谈到了大数据工程师的成长和发展的问题,这让我觉得作者真的很有心。当年我在写自己的书的时候,完全不会想到可以谈一下相关从业人员的成长和发展,而实际上,这也确实是很多从业人员关心的内容。作为经验丰富的过来人,我相信他的建议可以给广大读者以帮助。 曾宪杰 美丽联合集团CTO 《大型网站系统与Java中间件实践》作者
推荐序二知道一个概念和真正懂得这个概念有很大的区别。经历过复杂系统搭建的人往往有切肤之痛系统建设的难点不在于组装多少时髦组件,而在于对技术和产品本质的理解,以及对公司文化、业务特点、团队组成等一系列真实世界问题的认知、思考和权衡,而建设大数据平台的挑战和迷人之处往往也就在于此。本书是中文技术世界里少有的对大数据平台建设思想进行如此系统阐述的书籍,读起来让人酣畅淋漓。这样带有思考结晶的书,真心值得推荐给每一位参与大数据平台建设的同学。郭威51信用卡CTO前 言Do the right thing first, then do the thing right 先做正确的事,再把事情做对。本书的目标定位市面上介绍大数据具体技术组件的书很多,既有像《Hadoop权威指南》这种介绍Hadoop生态系中主要的几种存储计算组件的原理和使用的经典入门书籍,也有各种针对单一组件,譬如HBaseHiveSparkStorm,介绍其架构和代码实现的书籍。但这些书籍多半是从各个组件自身内部技术实现的微观角度来展开内容,告诉读者的更多是怎么实现和怎么使用。很少有书籍从需求规划的角度来探讨该做什么和为什么要做的话题,而从大数据整体平台建设,以及产品和服务的宏观角度入手的书籍,就更加少了。笔者从事大数据相关领域的工作,是从加入Intel开源技术中心为Hadoop社区贡献代码开始的,其间参与过Hadoop、HBase、Phoenix、Tachyon、Spark等相关项目的改进工作。大约三四年前,为了更贴近大数据的实际工作应用场景,笔者来到了蘑菇街,开始带领蘑菇街的大数据基础架构团队,构建体系化、服务化的大数据开发平台。在几年的大数据开发平台建设过程中,笔者深切地体会到它与之前自己所从事的单个具体大数据开源项目组件的开发工作有着很大的不同。不同之处不在于具体的技术细节实现方面,而在于更加软性的目标、方向、思路、功能规划和产品实现方面。在单个具体组件的开发工作中,特别是在笔者早年所处的开源项目开发环境中,开发人员大多时候是在一个问题非常明确、环境相对简单的场景下工作。比如,修复一个Bug、提升某个环节的性能、拓展一个具体的功能,开发人员权衡更多的是在单一系统内部,各种实现方案对性能和稳定性的影响等。而对于大数据开发平台的建设工作来说,具体组件的相关实现工作固然也很需要,但整体解决方案的权衡把握才是更加关键也更加困难的地方。对于组件的实现,社区往往有比较成熟的基础可供借鉴,即使暂时没有,它所需要解决的问题和目标通常也比较客观和标准。而平台构建和整体服务解决方案相对来说就没有太多的现成经验可供借鉴,答案本身往往也没有绝对的好坏对错的衡量标准。有时候,甚至连需要解决的问题是什么,该往哪个方向走,都未必有明确的答案。更多的时候,平台建设者需要结合实际的业务场景和用户需求,不仅从技术架构,更要从代价、收益、业务价值、易用性和可维护性等众多角度进行综合评估和取舍,不仅需要纵向地在一个系统内部思考问题,还要横向地在多个系统之间权衡比较。所以,平台建设工作往往更需要开发人员的实践经验积累,需要培养跳出现象看需求本质的习惯和思维能力。这些习惯和能力显然不是一两天就能够快速培养起来的,也不是简单通过看代码就能够领会的。但如果能有更多的他人经验总结和实践案例供学习参考,相信上手的速度可以加快很多。笔者在开始构建大数据开发平台的工作之初,也面临着同样的问题。希望能找到这样的指导性资料和文档来加速学习,提高工作效率。但现实中能找到的书籍更多的是偏务实的技术细节介绍和分析的书籍,几乎没有书籍集中讨论笔者想寻找的内容,而且内容多半零散分布在各类博文、项目Wiki、会议分享之类的材料中,需要自行在实践中不断总结和归纳。正因为对这类文档的缺乏深有体会,笔者从2017年开始在自己的公众号上,结合自己几年来平台建设的实践经验总结,开始撰写一些务虚的文章,希望能够给一些入行不久,同样面临上述问题困扰的同行一些经验参考,本书是对这些文章进行整理和总结的成果。希望能够系统化地介绍一下大数据开发平台服务构建的整体思路、目标、方针和可能的解决方案,最终目的不是告诉读者具体应该怎么做,而是期望起到引导方向、启发思路的作用,毕竟问题的解决方案不止一种,选择正确的问题去解决才是最重要的。欢迎读者能就本书的内容和笔者进行更多的交流探讨。本书内容简介本书的内容大致可以分为三部分。工欲善其事,必先利其器。要想建设好大数据开发平台,首先要做好架构者和开发者自身的思想建设工作。第一部分由前两章组成,探讨大数据平台的整体建设思路和目标,以及开发者如何培养正确的产品和服务意识。第二部分具体介绍大数据开发平台的各种核心组件。在这一部分,笔者不会详细介绍Hadoop、Hive、Spark等相对成熟、标准的基本存储计算组件,深入了解这些组件更好的方式,是去阅读最新的官方文档。笔者会重点介绍各种并没有标准或尚未足够成熟的解决方案,从开发平台建设的角度来说,它们都是每个成熟的开发平台必不可少的核心组件,如工作流调度系统、集成开发环境、元数据管理系统、数据交换服务、数据可视化服务、数据质量管理服务、测试环境的建设等。介绍这些系统和服务的重点,也不在于对某个具体实现方案的详细代码进行解析,大多首先介绍它们背后的基础原理和背景知识,然后从需求和功能定位的角度,分析各种实现方案的目标出发点,以及各种方案的优缺点,最后再结合蘑菇街自身的实践经验,介绍一下蘑菇街在这些组件上具体的功能需求分析、产品目标定位,以及一些经验教训和将来的改进方向。目的还是让读者有一个完整的感性体验,进而找到最适合自己的解决方案,而非对我们的方案照搬照做,那样就违背笔者撰写本书的初衷了。第三部分由最后两章组成,其中第9章是蘑菇街大数据平台的跨机房迁移实践经验分享总结,对于业务正常发展的公司团队来说,这可能是迟早要遇上的问题,只是具体形式和规模不同而已。第10章则是从大数据平台开发人员自身的能力建设、职业规划等角度入手,宽泛地谈谈工作乃至生活中会面对的价值取舍、方向选择,以及做事的行为准则、方式方法等问题。不敢上升到人生观、价值观的高度,更多的是就笔者十多年工作经历的一点个人感悟,以及对一些刚踏入工作不久的同学身上常见问题和困扰的一些观察体会,与大家一起交流探讨一下。It''s never wrong to do the right thing 做正确的事永远不会有错。希望本书能够给各位读者带来一些有益的启发,以在大数据平台开发领域,去自主思考和选择正确的道路,去探寻自己的答案,哪怕最后全盘推翻了笔者在本书中的相关经验总结,只要触发了这些动作,那笔者的目标也就算达到了。