董老师走近斯坦福讲座
2015 年1月28日最新讲座《董老师开课啦》走进斯坦福,聊聊硅谷创业公司和大数据的事儿
董飞,知乎达人,分享过《哪些硅谷创业公司能给拜访者留下深刻印象》,《美国大数据工程师面试攻略》,《Coursera 上有哪些课程值得推荐》引起强烈反响,受到社交圈广泛转载。
讲座提纲:
一,硅谷IT公司领域分类, 今年最火的公司有哪些?
二,大数据相关技术,应用场合和相关公司列表
三,Hadoop 生态系统和架构设计概述, MapReduce实例教程,Spark介绍和编程模型
四,Linkedin/Coursera内部实践,从面试者角度分析:求职技巧和面试准备
根据规模我把公司分成4类,成熟型,上市公司,快上市的,或者还是创业阶段的。这些公司都是大家很喜爱讨论的,我都亲自面试和感受过他们的环境,我后来有机会也会一一给大家详细介绍。
华尔街网站给出的最新创业公司融资规模图。黑色表明2010年后成立的。截至到2015年1月17日,规模跟去年比已经发生了很大的变化。第一估值在10Billlon的达到了7家,而一年前一家都没有。第二第一名是中国人家喻户晓的小米,美团也是在上升渠道很猛。第三,前20名中,绝大多数(8成在美国,在加州,在硅谷,在旧金山!)列如Uber, Airbnb, Dropbox, Pinterest. 第四 里面也有不少类似模式成功的,列如Flipkart就是印度市场的淘宝,Uber与Airbnb都是共享经济的范畴。所以大家还是可以在移动(Uber),大数据(Palantir),消费级互联网,通讯(Snapchat),支付(Square),O2O App里面寻找下大机会。
在Linkedin,它每年评选一个最有需求的创业公司名单,基本上结合Linkedin用户访问量,申请数做出的挖掘。我这里列出了最近3年,大家可以做个判别和趋势分析,里面还是很大靠谱的,列如不少上榜名单已经成功IPO(GoPro. Hortonworks, Splunk),里面有许多大数据领域公司(Splunk, Box, Nimble Storage, Violin Memroy, Dropbox)除了之前看到的一些互联网项目,在一些医疗健康(theranos),智能硬件(leap motion, fitbit, Jawbone),在线教育(Coursera),也吸引了很大注意力。
Gartner公司每年发布技术趋势炒作图,Gartner's 2014 Hype Cycle for Emerging Technologies Maps the Journey to Digital Business
今年和去年的图对比显示,物联网、自动驾驶汽车、消费级3D打印、自然语言问答等概念正在处于炒作的顶峰。而大数据已从顶峰滑落,NFC和云计算接近谷底。
未来趋势是什么?大家都很关心。我先提计算机逻辑的奠基者艾伦图灵(计算机届最高奖以他命名),他的一个伟大贡献就是在人工智能的开拓工作,他提出图灵测试某机器是否能表现出与人等价或无法区分的智能。我们目前回到今天,人工智能已经有了很大进步,从专家系统到基于统计的学习,从支持向量机到神经网络深度学习,每一步都带领机器智能走向下一个阶梯。在Google资深科学家吴军博士(数学之美,浪潮之巅作者),他提出当前技术发展三个趋势,第一,云计算和和移动互联网,这是正在进行时;第二,机器智能,目前开始发生,但对社会的影响许多人还没有意识到;第三,大数据和机器智能结合,这是未来时,必定会发生,有公司在做,但还没有太形成规模。他认为未来机器会控制98%的人,而目前我们就要做个选择,怎么成为剩下的2%?
大数据入门,我们做个思考,以前有个国王很高兴想奖赏他的宠臣,然后说让他来提任何奖励,这个大臣给国王看下面这个棋盘,是个8*8的方格,如果我在每个标号的格子内放米粒,第一个格子放1粒米,后面的格子总是前面格子的两倍。那么问题来了,如果我把整个棋盘放满,需要多少米粒?我们学过级数的话,可以快速做个演算,它的推演是 1 + 2 + 4 … + 2^63 = 2^64 – 1 这个数字多大许多人没印象,反正如果真的要兑现的话,这个国家肯定是破产了。实则我把这个棋盘分成上下两半,在上一半总共需要的米粒是2^32, 这并不是个很大的数,实则前几年计算机的32位就是那么大,但下半场就完全不一样了,这是个平方级别的scale,我下面会给大家一个交代。目前大家也常常听到什么手机64位处理器,实则并无实际意义。
这张曲线图是信息时代的增长,实则在工业革命之前(1820年),世界人均GDP在1800年前的两三千年里基本没有变化,而从1820年到2001年的180年里,世界人均GDP从原来的667美元增长到6049美元。这里面发生了什么,大家可以去思考一下。但人类的进步并没有停止或者说稳步增长,在发明了电力,电脑,互联网,移动互联网,全球年GDP增长 从万分之5到2%。信息也是在急剧增长,最近10年是远超人类所有之前累计信息量之和。在计算机时代,有个著名的摩尔定律,同样成本每隔18个月晶体管数量会翻倍,这个规律已经很好的match了最近30年的发展,可以衍生到许多类似的领域:存储,功耗,带宽,像素。而下面这个是冯诺伊曼,20世纪最重大的数学家之一,在现代计算机、博弈论和核武器等诸多领域内有杰出建树的最伟大的科学全才之一。他提出著名的奇点理论。美国未来学家Ray Kurzweil称人类能够在2045年实现数字化永生,他自己创办奇点大学,信任随着信息技术、无线网、生物、物理等领域的指数级增长,将在2029年实现人工智能,人的寿命也将会在未来15年得到大幅延长。
我们在回到大数据的特性,它是体积大,总类多,变化快,地球上至今的数据量从GB,TB,PB,EB到达ZB,我们之前提出的2^64就相当于16EB的大小
大数据的用途,所谓学以致用,大数据领域在各个行业都可以应用,这里举出几个有趣的例子,在Linkedin的时候,CEO提出经济图谱的概念,希望整合用户,公司,工作机会,技能,学校,帖子变成一个复杂而有蕴含无限可能的数字化社会。找对象,有个国外的极客,他抓取了dating网站的数据,根据有些指标如地理,年龄,兴趣,建立下面的3D模型找到真爱;例如阿里巴巴通过数据魔方(它们的大数据产品),提炼出消费跟女生胸部成正比的结论。在移动App上,今日头条通过你的个人社会化信息,建立起兴趣图谱推荐文章并且随着你的使用会越来越机智;在线教育领域:MOOC中的M就是大规模的意思;其他如互联网金融人人贷,通过大数据积累信用,释放一些传统金融体系下未被满足而又广泛存在的巨大需求,最近也是拿到1.3亿美金的融资。硅谷有家Wealthfront做大数据理财,23andMe提供个人基因组的“大数据“。等等
除了大数据,从另一个微观角度如何看小,这就像相对论和量子力学,Google院士Jeff Dean给出了一些超级基本,但也是学计算机需要掌握的数字。在计算机体系结构里有个局部性原理(Locality)越往上的就越快,当然代价就是超级珍贵,从寄存器到CPU L2 Cache, 从内存到Flash到磁盘到网络,从连续读到随机读,它们的速率都是相差数量级的。还有个著名法则8020,就是说80%的访问都是20%的数据或者资源,所以我们要解决主要问题,局部性原理也是类似,最近访问的数据就是会被频繁使用,需要做好Cache。
2014年总结的Big Data公司列表,我们大致可以分成基础架构和应用,而底层都是会用到一些通用技术,如Hadoop,Mahout,HBase,Cassandra,我在下面也会涵盖。在分析这一块,Cloudera,Hortonworks,MapR作为Hadoop的三剑客,一些运维领域,MangoDB,Couchbase都是NoSQL的代表,作为服务领域AWS和Google BigQuery剑拔弩张,在传统数据库,Oracle收购了MySQL,DB2老牌银行专用,Teradata做了多年数据仓库。上面的Apps更多,列如社交消费领域Google, Amazon, Netflix, Twitter, 商业智能:SAP,GoodData,一些在广告媒体领域:TURN,Rocketfuel,做智能运维Sumologic等等。去年的新星 Databricks 伴随着Spark的浪潮震撼Hadoop的生态系统。

对于迅速成长的中国市场,大公司也意味着大数据,BAT三家都是对大数据的投入也是不惜余力,我4年前在Baidu的的时候,就提出框计算的东东,最近两年成立了硅谷研究院,挖来Andrew Ng作为首席科学家,研究项目就是百度大脑,在语音,图片识别大幅提高准确度和召回率,最近还做了个无人自行车超级有趣。腾讯作为最大的社交应用对大数据也是情有独钟,自己研发了C++平台的海量存储系统。淘宝去年双十一主战场,2分钟突破10亿,交易额突破571亿,背后是有许多故事,当年在百度做Pyramid(按Google三辆马车打造的金字塔三层分布式系统)有志之士,继续在OceanBase创造神话。而阿里云当年备受争议,马云也怀疑是不是被王坚忽悠,最后经历了双十一的洗礼证明了OceanBase和阿里云的靠谱。小米的雷军对大数据也是寄托厚望,一方面这么多数据几何级数增长,另一方面存储带宽都是巨大成本,没价值就真破产。
大数据相关技术,最紧密的就是云计算,我列出主要是Amazon Web Service和Google Cloud Platform,在国内还有阿里云,金山云,百度云,腾讯云,小米云,360云,七牛。。每个里面都是大量技术文档和标准,从计算到存储,从数据库到消息,从监控到部署管理,从虚拟网络到CDN,把所有的一切用软件重新定义了一遍。
第一看Hadoop从哪里开始的,不得不提Google的先进性,在10多年前,Google出了3篇paper论述分布式系统的做法,分别是GFS, MapReduce, BigTable,超级NB的系统,但没人见过,在工业界许多人就想按其思想去仿作,当时Apache Nutch Lucene的作者Doug Cutting也是其中之一,后来他们被Yahoo收购,专门成立Team去投入做,就是Hadoop的开始和大规模发展的地方,之后随着Yahoo的牛人去了Facebook, Google, 也有成立了Cloudera, Hortonworks等大数据公司,把Hadoop的实践带到各个硅谷公司。而Google还没有停止,又出了新的三辆马车,Pregel, Caffeine, Dremel, 后来又有许多步入后尘,开始新一轮开源大战。
为啥Hadoop就比较适合做大数据呢?第一扩展很好,直接通过加节点就可以把系统能力提高,它有个重大思想是移动计算而不是移动数据,由于数据的移动是很大的成本需要网络带宽。其次它提出的目标就是利用廉价的普通计算机(硬盘),这样虽然可能不稳定(磁盘坏的几率),但通过系统级别上的容错和冗余达到高可靠性。并且超级灵活,可以使用各种data,二进制,文档型,记录型。使用各种形式(结构化,半结构化,非结构化所谓的schemaless),在按需计算上也是个技巧。
我们提到Hadoop一般不会说某一个东西,而是指生态系统,在这里面太多交互的组件了,涉及到IO,处理,应用,配置,工作流。在真正的工作中,当几个组件相互影响,你的头疼的维护才刚刚开始。我也简单说几个:Hadoop Core就三个HDFS,MapReduce,Common,在外围有NoSQL: Cassandra, HBase, 有Facebook开发的数据仓库Hive,有Yahoo主力研发的Pig工作流语言,有机器学习算法库Mahout,工作流管理软件Oozie,在许多分布式系统选择Master中扮演重大角色的Zookeeper。
这是Hortonworks提出的data platform,这个公司比较强势,有最多的Hadoop committee成员,是真正的标准制定者。2.0就是由它们提出。在Hadoop 1.0之前,是0.16到0.19,0.20,还有一只是0.23进化成目前的2.0。主要区别是 1.0只能支持MapReduce框架,资源和数据处理限制在一起。而2.0第一抽象出Yarn这个资源管理器,然后上层可以支持各种插件机制,便于扩展,Hortonworks还研发了Tez作为加速引擎把一些相关任务合并共享或者并行来优化。
HDFS,所谓Hadoop的分布式文件系统,它是能真正做到高强度容错。并且根据locality原理,对连续存储做了优化。如果让你自己来设计分布式文件系统,在某机器挂掉还能正常访问该怎么做?主要是靠备份,HDFS用一种机架位感知的办法,先把一份拷贝放入同机架上的机器,然后在拷贝一份到远程,这样如果某个数据点坏了,就从另一个机架上调用,而同一个机架内网连接是超级快的,如果那个机器也坏了,只能从远程去获取。目前还有基于erasure code本来是用在通信容错领域的办法,可以节约空间又达到容错的目的。
MapReduce,第一是个编程范式,它的思想是对批量处理的任务,分成两个阶段,所谓的Map阶段就是把数据生成key, value pair, 再排序,中间有一步叫shuffle,把同样的key运输到同一个reducer上面去,而在reducer上,由于同样key已经确保在同一个上,就直接可以做聚合,算出一些sum, 最后把结果输出到HDFS上。对应开发者来说,你需要做的就是编写Map和reduce函数,像中间的排序和shuffle网络传输,容错处理,框架已经帮你做好了。
每个编程语言都有个Hello world的版本,对应的Hadoop就是Word Count。需求很简单,就是为文档中的每个单词统计词频,典型的思路就是分而治之:先对每个文档片段做个Map,生成单词到频率(1)的对应,然后把同样单词(key)送入到同一个reducer上面去,最后每个reducer加一下就拿到最后结果,是不是很简单?

Java版本的MapReduce程序,工作面试中需要的,大家背下来就可以:)
MapReduce模型有什么问题?第一:需要写许多底层的代码不够高效,第二:所有的事情必须要转化成两个操作,这本身就很奇怪,也不能解决所有的情况。
介绍一些Spark的起源。发自 2010年Berkeley AMPLab,发表在hotCloud 是一个从学术界到工业界的成功典范,也吸引了顶级VC:Andreessen Horowitz的 注资 AMPLab这个实验室超级厉害,做大数据,云计算,跟工业界结合很紧密,之前就是他们做Mesos,Hadoop online, 在2013年,这些大牛(MIT最年轻的助理教授)从Berkeley AMPLab出去成立了Databricks。它是用函数式语言Scala编写,Spark简单说就是内存计算(包含迭代式计算,DAG计算,流式计算 )框架,之前MapReduce因效率低下大家常常嘲笑,而Spark的出现让大家很清新。 Reynod 作为Spark核心开发者, 介绍Spark性能超Hadoop百倍,算法实现仅有其1/10或1/100。
为啥用Spark,最直接的就是快啊,你用Hadoop跑大规模数据几个小时跑完,这边才几十秒,这种变化不仅是数量级的,并且是对你的开发方式翻天覆地的变化,列如你想验证一个算法,你也不知道到底效果如何,但如果能在秒级就给你反馈,你可以立马去调节。其他的如比MapReduce灵活啊,支持迭代的算法,ad-hoc query, 不需要你费许多力气花在软件的搭建上。在去年的Sorting Benchmark上,Spark用了比Hadoop更少的节点在23min跑完了100TB的排序,刷新了之前Hadoop保持的世界纪录。
这个是跟Hadoop跟Spark在回归算法上比较,在Hadoop的世界里,做迭代计算是超级耗资源,它每次的IO 序列画代价很大,所以每次迭代需要差不多的等待。而Spark第一次启动需要载入到内存,之后迭代直接在内存利用中间结果做不落地的运算,所后来期的迭代速度快到可以忽略不计。
说到一些工业实践,我可以拿Linkedin举例子,在Linkedin,有许多数据产品,列如People you may like, job you may be interested, 你的用户访问来源,甚至你的career path都可以挖掘出来。那么在Linkedin也是大量用到开源技术,我这里就说一个最成功的Kafka,它是一个分布式的消息队列,可以用在tracking,机器内部metrics,数据传输。数据在前端后端会经过不同的存储或者平台,每个平台都有自己的格式,如果没有一个unified log,会出现灾难型的O(m*n)的数据对接复杂度,如果你设定的格式一旦发生变化,也是要修改所有相关的。所以这里提出的中间桥梁就是Kafka,大家约定用一个格式作为传输标准,然后在接受端可以任意定制你想要的数据源(topics),最后实现的线性的O(m+n)的复杂度。
Coursera作为创业公司,超级想保持灵敏和高效。从技术上来说,所有的都是在基于AWS开发,可以想像随意启动云端服务,做一些实验。我们大致分成产品组,架构组,和数据分析组。使用Scala作为主要编程语言,采用Python作为脚本控制。我在的数据组由10多人构成,一部分是对商业产品,核心增长指标做监控,挖掘和改善。一部分是搭建数据仓库完善跟各个部门的无缝数据流动,也用到许多技术如Scalding编写Hadoop MapReduce程序,也有人做AB testing框架, 推荐系统。实则除了开源世界,我们也积极使用第三方的产品,列如sumologic做日志错误分析,Redshift作为大数据分析平台,Slack做内部通讯。而所有的这些就是想解放生产力,把重心放到用户体验,产品开发和迭代上去。
这个是Uber公司Offer模版,里面会谈到几件事,职位,你的等级。至于收入国内经IT公司常多发几个月的作为年终奖励,百度50个月,阿里巴巴100月的超级大礼包也有。但硅谷这边一般就是基本工资,奖金是一个比例,10%-20%,但许多创业公司是没有的,股票激励(RSU),期权,这里面也有很大不确定,如果当时去Uber,价值2millon美金的我也很难想到。国内一般劳动合同是有试用期,工资还要打折,之后是3年固定合同,有可能签竞业协议。硅谷公司一般是没有的,很灵活,叫employment at will, 就是双方都不付强制责任,理论上来说公司觉得你能力不行,可以随时把你炒掉,反之你干的不爽也可以随时炒掉公司。
Google为了让大家更好准备技术面试,跟Coursera合作,准备推出一系列课程。
这里就简单列出一些技术面试的准备,我在zhihu上写过许多求职面试面经文章,大家多看看。
获取面试机会,从发现职位到内推到简历修改到首次接触HR,电面,Onsite面试这些是基本的流程。
走到这一步,你如何选择Offer,从公司背景调查可以通过Glassdoor查看员工匿名评价,crunchbase查融资,Alexa查网站排名,Linkedin查人才。对于公司大小,是否技术驱动,面向企业,移动端这也是思考因素。当然如果你有多个Offer可以去相互竞争,实现利益最大化。但最重大的还是你的兴趣,看你的发展平台,除此之外思考你个人压力,是否能跟生活平衡。最后拿到Offer才仅仅是开始,只有把它付诸实践才有意义!
先介绍技术书籍,Hadoop the definitive Guide 是 Coders at Work, Founders at Work 是一个系列,The architecture of open source application列举了最有名的开源项目架构剖析。除了技术书籍,我还推荐人文书籍列如数学之美,吴军博士出手,Lean In Facebook COO女性如何赢在职场。未来学家雷写的奇点临近,Paypal黑帮成员,著名VC Peter Thiel写创业教程Zero to One, A16Z创始人Ben写的the Hard thing about hard thing.
每个人都是矩阵中的一段程序,算法决定选择,选择决定人生!
这是我在面苹果公司的一个面试题,大家不用微积分能否解出阴影部分面积,15分钟答出来可以联系我,可以去最强劲脑PK:)
愚者等待机会,强者把握机会,智者创造机会,让我们追随技术,珍惜互联网给我们的伟大机会,奔跑吧少年!


