董飞,Coursera数据工程师。曾先后在创业公司酷迅,百度基础架构组,Amazon 云计算部门,LinkedIn担任高级工程师,负责垂直搜索,百度云计算平台研发和广告系统的架构。董飞本科毕业于南开大学,硕士毕业于杜克大学计算机系。他在知乎上分享过多个引起强烈反响的问答,其中包括 《哪些硅谷创业公司能给拜访者留下深刻印象》 、 《美国大数据工程师面试攻略》 、 《Coursera 上有哪些课程值得推荐》 等。
在硅谷大家非常热情地谈创业谈机会,我也通过自己的一些观察和积累,看到了不少最近几年涌现的热门创业公司。这个是华尔街网站的 全世界创业公司融资规模评选 。它本来的标题是billion startup club,不到一年的时间,截至到2015年1月17日,现在的排名和规模已经发生了很大的变化。
所以大家还是可以在移动(Uber),大数据(Palantir),消费级互联网,通讯(Snapchat),支付(Square),O2O App里面寻找到大机会。这里面很多公司我都亲自面试和感受过他们的环境。
我认为在硅谷这个充满梦想的地方,投资人鼓励创业者大胆去做,同样也助长了泡沫。很多项目在几个月的时间就会估值翻2、3倍,如Uber,Snapchat等等,我也惊讶于他们的巨额融资规模。
下面这张图讲的就是“新兴技术炒作”周期,把各类技术按照技术成熟度和期望值分类,这是硅谷创业孵化器YCombinator的课程 How to start a startup 提到的。“创新萌芽(Innovation Trigger)”、“期望最顶点(Peak ofInflated Expectation)”、“下调预期至低点(Trough of Disillusion)”、“回归理想(Slope ofEnlightenment)”、“生产率平台(Plateau of Productivity)”。越往左,技术约新潮,越处于概念阶段;越往右,技术约成熟,越容易进入商业化应用,发挥出提高生产率的效果。纵轴代表预期值,人们对于新技术通常会随着认识的深入,预期不断升温,伴之以媒体炒作而到达顶峰;随之因技术瓶颈或其他原因,预期逐渐冷却至低点;但技术成熟后,期望又重新上升,重新积累用户,然后就到了可持续增长的健康轨道上来。今年和去年的图对比显示,物联网、自动驾驶汽车、消费级3D打印、自然语言问答等概念正在处于炒作的顶峰。而大数据已从顶峰滑落,NFC和云计算接近谷底。
我先提一部最近看过的电影《模仿游戏》( Imitation Game ),这部影片讲的是计算机逻辑的奠基者艾伦图灵艰难的一生。他当年为破译德军密码制作了图灵机为二战胜利做出卓越贡献,挽回几千万人的生命,可在那个时代,他因为是同性恋而被判化学阉割,最后自杀结束了短暂的42岁生命。他的伟大贡献之一就是在人工智能方面的开拓,他提出图灵测试(Turing Test),测试某机器是否能表现出与人等价或无法区分的智能。在今天,人工智能已经有了很大进步,从专家系统到基于统计的学习,从支持向量机到神经网络深度学习,每一步都带领机器智能走向下一个阶梯。
Google的资深科学家吴军博士(《数学之美》,《浪潮之巅》作者),他提出当前技术发展三个趋势:第一、云计算和和移动互联网,这是正在进行时;第二、机器智能,现在开始发生,但对社会的影响很多人还没有意识到;第三、大数据和机器智能结合,这是未来时,一定会发生,有公司在做,但还没有太形成规模。他认为 未来机器会控制98%的人 ,而现在我们就要做个选择,怎么成为剩下的2%? 李开复在2015年新年展望也提出未来五年物联网将带来庞大创业机会。
其实在工业革命(1820年)之前,世界人均GDP在1800年前的两三千年里基本没有变化,而从1820年到2001年的180年里,世界人均GDP从原来的667美元增长到6049美元。由此足见,工业革命带来的收入增长的确是翻天覆地的。但人类的进步并没有停止或者稳步增长,在发明了电力、电脑、互联网、移动互联网之后,全球年GDP增长从万分之5涨到了2%,信息也是在急剧增长。根据计算,最近两年的信息量是之前30年的总和,最近10年的信息量远超人类所有之前累计的信息量之和。在计算机时代,有个著名的摩尔定律,就是说同样成本下,每隔18个月晶体管数量会翻倍,反过来同样数量晶体管成本会减半,这个规律已经很好地对应了最近30年的发展,并且可以衍生到很多类似的领域,比如存储、功耗、带宽、像素等等。
作为20世纪最重要的数学家之一,现代计算机、博弈论和核武器等诸多领域的科学全才之一,冯•诺伊曼提出“技术”将会逼近人类历史上的某种本质的奇点,在那之后,全部人类行为都不可能以我们熟悉的面貌继续存在。这就是著名的奇点理论。目前,信息量正在以越来越快的指数型速度增长,美国未来学家Ray Kurzweil称人类能够在2045年实现数字化永生,他自己也创办了奇点大学。相信随着信息技术、无线网、生物、物理等领域的指数级增长,人类将在2029年实现人工智能,人的寿命也将会在未来15年得到大幅延长。
大致可以把大数据公司分成基础架构类和应用类,而底层都是会用到一些通用技术,如Hadoop、Mahout、HBase、Cassandra等等;在分析领域,Cloudera、Hortonworks、MapR是Hadoop的三剑客;在运维领域,MongoDB、CouchBase都是NoSQL的代表;在服务领域,AWS和Google BigQuery剑拔弩张;在传统数据库,Oracle收购了MySQL,DB2是老牌银行专用,而Teradata则做了多年数据仓库。
Apps领域的大数据公司更多,比如社交消费领域的Google、 Amazon、Netflix、Twitter等等, 商业智能领域的SAP、GoodData,还有一些在广告媒体领域,TURN、Rocketfuel,另外还有做智能运维的Sumo Logic等等。去年的新星 Databricks 伴随着Spark的浪潮震撼了Hadoop的生态系统。
对于迅速成长的中国市场,大公司也意味着大数据。BAT三家对大数据的投入都是不惜余力的。我4年前在百度的时候,百度就提出框计算的概念,最近两年成立了百度硅谷研究院,挖来Andrew Ng作为首席科学家,研究项目就是百度大脑,在语音、图片识别技术上大幅提高精确度和召回率,最近还做了个无人自行车,非常有趣。腾讯作为最大的社交应用对大数据也是情有独钟,他们自己研发了C++平台的海量存储系统。淘宝去年双十一主战场,2分钟突破10亿,交易额突破571亿,背后有很多故事,当年在百度做Pyramid(按Google三辆马车打造的金字塔三层分布式系统)的有志之士,继续在OceanBase创造神话。阿里云当年备受争议,马云也被怀疑是不是被王坚忽悠,最后经历了双十一的洗礼证明了OceanBase和阿里云是靠谱的。小米的雷军对大数据也寄托厚望,一方面这么多数据几何级数增长,另一方面存储带宽都是巨大成本,没价值就真破产了。
问:与大数据技术关系最紧密的就是云计算,您曾在Amazon 云计算部门工作过,能简单介绍一下亚马逊的AWS和Redshift框架吗?
AWS总体上成熟度很高,有大量startup都是基于上面开发,比如有名的Netflix,Pinterest,Coursera等。Amazon还在不断创新,每年召开reInvent大会推广新的云产品和分享成功案例。在这里面我随便说几个,S3是简单面向对象的存储,DynamoDB是对关系型数据库的补充,Glacier是对冷数据做归档处理,Elastic MapReduce直接对MapReduce做打包提供计算服务,EC2就是基础的虚拟主机,Data Pipeline 会提供图形化界面直接串联工作任务。
Redshift是一种大规模并行计算(massively parallel computer)架构,是非常方便的数据仓库解决方案,它作为SQL接口跟各个云服务无缝连接。Redshift的最大特点就是快,在TB到PB级别有非常好的性能。我在工作中也是直接使用Redshift,它还支持不同的硬件平台,如果想速度更快,可以使用SSD的,当然支持容量就小些。
问:Hadoop是现今最流行的大数据技术,在它出现的当时,是什么造成了Hadoop的流行?当时Hadoop具有哪些设计上的优势?
要看Hadoop从哪里开始,就不得不提Google的先进性。在10多年前,Google发表了3篇论文论述分布式系统的做法,分别是GFS、MapReduce、BigTable。虽然都是很厉害的系统,但没人见过。在工业界很多人痒痒得就想按其思想去仿作。当时Apache Nutch Lucene的作者Doug Cutting也是其中之一。后来Doug他们被Yahoo收购,专门成立Team来投入研究,这就是Hadoop开始和大规模发展的地方。之后随着Yahoo的衰落,牛人去了Facebook、 Google,也有的成立了Cloudera、Hortonworks等大数据公司,把Hadoop的实践带到各个硅谷公司。而Google还没有停止,又出了新的三辆马车,Pregel、Caffeine、Dremel,后来又有很多人步入后尘,开始了新一轮开源大战。
为啥Hadoop就比较适合做大数据呢?首先扩展性很好,直接通过加节点就可以把系统能力提高。Hadoop有个重要思想就是移动计算而不是移动数据,因为数据的移动会带来很大的成本,需要网络带宽。其次,Hadoop提出的目标就是利用廉价的普通计算机(硬盘),这样虽然可能不稳定(磁盘坏的几率),但通过系统级别上的容错和冗余达到高可靠性。并且非常灵活,可以使用各种数据,二进制、文档型、记录型,也可以使用各种形式,结构化、半结构化、非结构化(所谓的schemaless),在按需计算上也是个技巧。
第一、需要写很多底层的代码,不够高效。第二、所有的事情必须要转化成两个操作Map或Reduce,这本身就很奇怪,也不能解决所有的情况。
其实Spark出现就是为了解决上面的问题。先说一些Spark的起源,它来自 2010年Berkeley AMPLab,发表在HotCloud上的Spark是一个从学术界到工业界的成功典范,也吸引了顶级VC Andreessen Horowitz的注资。在2013年,这些大牛(包括Berkeley系主任,MIT最年轻的助理教授)从Berkeley AMPLab出去成立了Databricks,引无数Hadoop大佬尽折腰。
Spark是用函数式语言Scala编写的,Spark简单说就是内存计算(包含迭代式计算、DAG计算、流式计算 )框架。之前MapReduce因效率低下,经常被大家诟病,而Spark的出现让大家感觉很清新。 Reynod 作为Spark核心开发者,介绍说Spark性能超Hadoop百倍,算法实现仅有其1/10或1/100。在去年的Sort benchmark上,Spark用了23min跑完了100TB的排序,刷新了之前Hadoop保持的世界纪录。
在LinkedIn有很多数据产品,比如People you may like、Job you may be interested。你的用户访问来源,甚至你的career path都可以挖掘出来。Linkedin也大量用到了开源技术,我这里就说一个最成功的Kafka。Kafka是一个分布式的消息队列,可以用在tracking、机器内部metrics、数据传输上。数据在前端后端会经过不同的存储或者平台,每个平台都有自己的格式,如果没有一个unified log,会出现灾难型的O(m*n)的数据对接复杂度。如果你设定的格式一旦发生变化,也要修改所有相关的格式。所以这里提出的中间桥梁就是Kafka,大家约定用一个格式作为传输标准,然后在接受端可以任意定制你想要的数据源(topics),最后实现线性的O(m+n)复杂度。对应的设计细节,还是要参考 设计文档 ,这里面主要作者Jay Kreps、Rao Jun成立了Kafka作为独立发展的公司。
Hadoop作为批处理的主力,大量应用在各个产品线上。比如广告组,我们一方面需要去做一些灵活的查询,分析广告主的匹配、广告预测和实际效果,另外在报表生成方面也是用Hadoop作为支持。如果你想去面试LinkedIn 后端组,我建议应该去把Hive、Pig、Azkaban(数据流的管理软件)、Avro 数据定义格式、Kafka、Voldemort 都了解一下。LinkedIn有 专门的开源社区 ,也是在建设自己的技术品牌。
问:能谈一谈Coursera在大数据架构方面和其他硅谷创业公司相比有什么特点?是什么原因和技术取向造成了这些特点?
首先我介绍一下Coursera。作为MOOC(大型开放式网络课程)中的领头羊,Coursera在2012年由Stanford大学的Andrew和Daphne两名教授创立,目前160名员工,原Yale校长担任CEO。Coursera的使命是universal access to world's best education。很多人问我为什么加入,首先我非常认可公司的使命,我相信教育可以改变人生,同样我们也可以改变教育。能不能把技术跟教育结合起来,这是一个很有趣的话题,里面有很多东西可以结合。比如提供高可靠平台支持大规模用户在线并发访问,利用数据挖掘分析学生行为做个性化课程学习并提高课程满意度,通过机器学习识别作业、互相评判,用技术让人们平等便捷的获取教育服务。
Coursera作为创业公司,非常想保持敏捷和高效。从技术上来说,所有的技术都是基于AWS开发的,可以随意启动云端服务并做实验。我们大致分成产品组,架构组和数据分析组。因为公司比较新,所以没有什么历史遗留迁移的问题。大家大胆地使用Scala作为主要编程语言,采用Python作为脚本控制。比如产品组就是提供课程产品,里面大量使用Play Framework,JavaScript的backbone作为控制中枢。而架构组主要是维护底层存储、通用服务、性能和稳定性。我所在的数据组由10多人构成,一部分是对商业产品,核心增长指标做监控、挖掘和改进。一部分是搭建数据仓库完善跟各个部门的无缝数据流动,这里也用到了很多技术。例如使用Scalding编写Hadoop MapReduce程序,也有人做AB testing框架、 推荐系统,尽可能用最少人力做有影响力的事情。其实除了开源世界,我们也积极使用第三方的产品,比如我们用Sumo Logic做日志错误分析,用Redshift作为大数据分析平台,用Slack做内部通讯。而所有的这些就是想解放生产力,把重心放到用户体验、产品开发和迭代上去。
Coursera是一个有使命驱动的公司,大家不是为了追求技术的极致,而是为了服务好老师、同学,解决他们的痛点,分享他们的成功。这点是跟其他技术公司最大的区别。从某个方面来说,现在我们还是处于早期积累阶段,大规模计算时代还没有来临,我们只有积极学习、适应变化才能保持创业公司的高速成长。
问:如果想从事大数据方面的工作,是否可以推荐一些有效的学习方法?有哪些推荐的书籍?
首先还是打好基础,Hadoop虽然火热,但它的基础原理都是书本上很多年的积累。像算法导论、Unix设计哲学、数据库原理、深入理解计算机原理、Java设计模式,有一些重量级的书可以参考,Hadoop 最经典的 The Definitive Guide , 我在知乎上也有分享 。
其次是选择目标,如果你想做数据科学家,我可以推荐coursera上的 data science课程 ,通俗易懂。学习Hive,Pig这些基本工具,如果做应用层,主要是要熟悉Hadoop的一些工作流,包括一些基本调优。如果是想做架构,除了要能搭建集群,要对各个基础软件服务很了解,还要理解计算机的瓶颈和负载管理以及Linux的一些性能工具。
最后,还是要多加练习。大数据本身就靠实践,你可以先按API写书上的例子,做到有能力调试成功。再下面就是多积累,当遇到相似的问题时能找到对应的经典模式。然后就是实际问题了,也许周边谁也没遇到过这样的问题,你需要灵感和在网上问问题的技巧,然后根据实际情况作出最佳选择。