Coursera 数据工程师分享大数据的迷离身世
“大数据”一词这几年来火爆异常,出镜率爆表,那么究竟什么才是大数据呢?你是否对他的了解只是“闻其名”,却未“知其人”呢?现在,这篇由硅谷在线教育公司 Coursera 数据工程师(也曾在百度、LinkedIn 等公司工作)的干货文章将为你详细介绍“大数据”的迷离身世。
硅谷在线教育公司 Coursera 数据工程师董飞准备在硅发布平台开讲了,课程第一系列《大数据入门》。董飞也曾在百度、LinkedIn 等公司工作。
在硅谷,大家非常热情地谈创业谈机会,我也通过自己观察和积累,看到不少最近几年涌现的热门创业公司。我先给大家一个列表,这是华尔街网站全世界创业公司融资规模的一个评选,它本来标题是“十亿美金俱乐部”,可以看出不到一年时间,截至今年 1 月 17 日,排名和规模已经发生很大变化。
首先,估值在十亿美金的公司达到 7 家,而一年前都没有;第二,第一名是中国的小米;第三,前 20 名中,绝大多数(八成在美国,在加州,在硅谷,在旧金山!)比如 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)也吸引很大注意力。
第三,看了那么多高估值公司,很多人都觉得非常疯狂,是不是很大泡沫了,泡沫是不是要破了,这是很多人的疑问。在硅谷这个充满梦想的地方,投资人鼓励创业者大胆去发展同样也助长泡沫,很多项目在几个月时间估值就会翻 2、3 倍,例如在 Uber、Snapchat 上,我也惊讶他们的巨额融资规模和颠覆速度。
下面这张图,就是讲新事物的发展规律,这是硅谷孵化器 YCombinator 公开课 How to start a startup 提到的。一个新 Idea 加上一点点原型,就会迅速吸引眼球,然后先驱者引发潮流,在大众爆发把泡沫吹到极致,接下来就是各种负面质疑,名声一落千丈,而这时离 Peak 也许才过去几个月。
但这东西本质没有变,从“看山不是山”到“看山还是山”,这段重心回归到产品上重新积累用户,然后就到了可持续增长的健康轨道上。从 Quora 网站流量、Tesla 股票到比特币,你都发现它们惊人的匹配这张图的某个节点。背后不变的是人性,举例在牛市,大家都很容易挣钱,但只有熬过最痛苦的时代(比如金融危机),才能体会事物发展本质和踏实的意义。
第四,未来趋势是什么?大家都很关心。我先提最近看的一部电影《Imitation Game》,它讲的是计算机逻辑奠基者艾伦图灵艰难的一生,当年为破译德军密码制作了图灵机为二战胜利作出卓越贡献,挽回几千万人的生命,可在那个时代因为同性恋被判化学阉割,自杀结束了短暂的 42 岁生命。
他的一个伟大贡献就是在人工智能的开拓,他提出图灵测试(Turing Test),测试某机器是否能表现出与人等价或无法区分的智能。我们现在回到今天,人工智能已有很大进步,从专家系统到基于统计的学习,从支持向量机到神经网络深度学习,每一步都带领机器智能走向下一个阶梯。
谷歌资深科学家吴军博士提出当前技术发展的三个趋势:第一,云计算和和移动互联网,这是正在进行时;第二,机器智能,现在开始发生,但对社会的影响很多人还没意识到;第三,大数据和机器智能结合,这是未来时,一定会发生,有公司在做,但还没太形成规模。
他认为未来机器会控制 98% 的人,而现在我们就要做个选择,怎么成为剩下的 2% ?李开复在 2015 年新年展望也提出未来五年物联网带来庞大创业机会。
大数据入门
接下来,我讲一讲大数据入门。先来做个思考,以前有个国王很阔绰也很爱排场,有天,他很高兴想奖赏他的宠臣,然后说,让他来提任何奖励。
这个大臣给国王看下面这个棋盘,是个 8*8 的方格,如果我在每个标号的格子内放米粒,第一个格子放 1 粒米,后面格子总是前面格子的两倍。那么问题来了,如果我把整个棋盘放满,需要多少米粒?
我们学过级数的话,可以快速做个演算,它的推演是 1 + 2 + 4 …… + 2^63 = 2^64 - 1 .这个数字多大很多人没印象,反正如果真要兑现的话,这个国家肯定是破产了。
其实我把这个棋盘分成上下两半,在上一半总共需要的米粒是 2^32,这并不是个很大的数,其实前几年计算机的 32 位就是那么大,但下半场就完全不一样了,这是个平方级别的规模,我下面会给大家一个交代。现在大家也经常听到什么手机 64 位处理器,并无实际意义。
我们接着看看这张曲线图是信息时代的增长,其实工业革命前(1820 年),世界人均 GDP 在 1800 年前的两三千年里基本没变化,而从 1820 年到 2001 年 180 年里,世界人均 GDP 从原来 667 美元增长到 6049 美元。
由此足见,工业革命带来的收入增长的确翻天覆地。这里面发生了什么?大家可以思考一下。但人类的进步,并没停止或者说稳步增长,在发明了电力、电脑、互联网、移动互联网,全球年 GDP 增长 从万分之 5 到 2%,信息也是在急剧增长。根据计算,最近两年信息量是之前 30 年总和,最近 10 年是远超人类所有之前累计信息量之和。
在计算机时代,有个著名摩尔定律,就是说同样成本每隔 18 个月晶体管数量会翻倍,反过来,同样数量晶体管成本会减半。这个规律已经很好匹配了最近 30 年的发展,并且可以衍生到很多类似领域:存储、功耗、带宽、像素。
而最下面这个头像是冯诺伊曼,20 世纪最重要数学家之一,在现代计算机、博弈论和核武器等诸多领域有杰出建树的最伟大科学全才之一。他提出技术会逼近人类历史上某种本质的奇点,在那后,全部人类行为都不可能以我们熟悉的面貌继续存在。
这就是著名的“奇点理论”,目前会呈越来越快的指数性增长,美国未来学家 Ray Kurzweil 称:人类能在 2045 年实现数字化永生,他自己也创办奇点大学,相信随信息技术、无线网、生物、物理等领域的指数级增长,将在 2029 年实现人工智能,人的寿命也将会在未来 15 年得到大幅延长。
我们再回到现在,地球上至今的数据量从 GB、TB、PB、EB 到达 ZB,我们之前提出的 2^64 就相当于 16EB 的大校
大数据有什么用?
所谓“学以致用”,大数据领域在各行业都可以应用,这里举几个有趣的例子。在 Linkedin 时,CEO 提出“经济图谱”的概念,希望整合用户、公司、工作机会、技能、学校和帖子变成一个复杂而有蕴含无限可能的数字化社会。
比如说找对象,有个国外极客,他抓取约会网站的数据,根据一些指标如地理、年龄、兴趣,建立下面的 3D 模型找到真爱;又如阿里巴巴通过数据魔方(它们的大数据产品),提炼出消费跟女生胸部成正比的结论。
在移动 App 上,今日头条通过你的个人社会化信息,建起兴趣图谱推荐文章并随你的使用会越来越聪明;在线教育领域:MOOC 中的 M 就是大规模的意思;其他如互联网金融人人贷,通过大数据积累信用,释放一些传统金融体系下未被满足而又广泛存在的巨大需求,最近也是拿到 1.3 亿美金融资。硅谷有家 Wealthfront 做大数据理财,23andMe 提供个人基因组的“大数据”等等。
大数据公司列表
下面是 2014 年别人总结的大数据公司列表,我们大致可以分成基础架构和应用,而底层都是会用到一些通用技术,如 Hadoop、Mahout、HBase 和 Cassandra,我在下面也会涵盖。
我可以举几个例子,在分析这块,Cloudera、hortonworks、mapr 作为 Hadoop 三剑客,一些运维领域,mangodb、couchbase 都是 nosql 代表,作为服务领域 AWS 和 Google BigQuery 剑拔弩张,在传统数据库,甲骨文收购了 MySQL、DB2 老牌银行专用,Teradata 做了多年数据仓库。
上面的 Apps 更多,比如社交消费领域的谷歌、亚马逊、Netflix、Twitter、商业智能:SAP、GoodData,一些在广告媒体领域:TURN、Rocketfuel,做智能运维 sumologic 等等。最后还有个去年的新星 Databricks 伴随着 Spark 的浪潮震撼 Hadoop 的生态系统。
大数据之中国公司
对迅速成长的中国市场,大公司也意味大数据,BAT 三家都是对大数据投入不惜余力,我 4 年前在百度时,百度就提出框计算的东东,最近两年成立硅谷研究院,挖来 Andrew Ng 做首席科学家,研究项目就是百度大脑,在语音、图片识别大幅提高精确度和召回率,最近还做了个无人自行车非常有趣。
腾讯作为最大社交应用对大数据也情有独钟,自己研发 C++ 平台的海量存储系统。淘宝去年双十一主战场,2 分钟突破 10 亿,交易额突破 571 亿,背后是有很多故事,当年在百度做 Pyramid(按谷歌三辆马车打造的金字塔三层分布式系统)有志之士,继续在 OceanBase 创造神话。
而阿里云当年备受争议,马云也在怀疑是不是被王坚忽悠,最后经历了双十一洗礼证明 OceanBase 和阿里云的靠谱。小米的雷军对大数据也是寄托厚望,一方面,这么多数据几何级数增长;另一方面存储带宽都是巨大成本,没价值就真破产。
大数据相关技术
大数据相关技术,最紧密的就是云计算,我列出主要是 Amazon Web Service 和 Google Cloud Platform,在国内还有阿里云、金山云、百度云、腾讯云、小米云、360 云、七牛……每个里面都是大量技术文档和标准,从计算到存储,从数据库到消息,从监控到部署管理,从虚拟网络到 CDN,把所有一切用软件重新定义了一遍。
先来讲亚马逊的云。我本人在亚马逊云计算部门工作过,所有还是比较了解 AWS,总体上成熟度很高,有大量创业公司都是基于上面开发,比如有名的 Netflix、Pinterest、Coursera.
亚马逊还是不断创新,每年召开 reInvent 大会推广新的云产品和分享成功案例,在这里面我随便说几个,像 S3 是简单面向对象的存储,DynamoDB 是对关系型数据库的补充,Glacier 对冷数据做归档处理,Elastic MapReduce 直接对 MapReduce 做打包提供计算服务,EC2 就是基础的虚拟主机,Data Pipeline 会提供图形化界面直接串联工作任务。
这边还可以说一下 Redshift,它是一种(Massively Parallel Computer)架构,是非常方便的数据仓库解决方案,就是 SQL 接口,跟各个云服务无缝连接,最大特点就是快,在 TB 到 PB 级别非常好的性能,我在工作中也直接使用,它还支持不同硬件平台,如果想速度更快,可以使用 SSD 的,当然支持容量就小些。
在数据库领域,我就列出三种代表,一类是关系型数据库管理系统,它的特点是 A(Atomic)、C(consistent)、I(isolation)、D(duration),连起来就是 ACID(酸)。简单说,就是支持事务回滚和外键关联,而 NoSQL 是与之对应的 Base(碱),所谓 Basic 可用,为了扩大 Scale,牺牲一些一致性和事务。而谷歌提出 F1,希望解决在大规模数据同时还要做到事务强一致性。在这里面都是非常常见的 NoSQL, 这些公司可能你都没听过,但它们都是融资过亿,估值都非常高,在几个 Billion 以上。
我会花一些篇幅介绍 Hadoop,首先看 Hadoop 从哪里开始的,不得不提谷歌的先进性,在 10 多年前,谷歌出了 3 篇论文论述分布式系统的做法,分别是 GFS、MapReduce、BigTable,非常牛逼的系统,但没人见过,在工业界很多人痒痒的,就想按其思想去仿作。
当时,Apache Nutch Lucene 作者 Doug Cutting 也是其中之一,后来他们被雅虎收购,专门成立团队去投入做,就是 Hadoop 的开始和大规模发展的地方,之后随着雅虎衰落,牛人去了 Facebook、谷歌,也有成立 Cloudera、Hortonworks 等大数据公司,把 Hadoop 的实践带到各个硅谷公司。
而谷歌还没停止,又出了新的三辆马车:Pregel、Caffeine 和 Dremel,后来又有很多步入后尘,开始新一轮开源大战。
那么为啥 Hadoop 就比较适合做大数据呢?首先扩展很好,直接通过加节点就可以把系统能力提高,它有个重要思想是:移动计算而不是移动数据,因为数据移动是很大的成本需要网络带宽。
其次,它提出的目标就是利用廉价普通计算机(硬盘),这样虽然可能不稳定(磁盘坏的几率),但通过系统级别上的容错和冗余达到高可靠性。并且非常灵活,可以使用各种data,二进制、文档型、记录型。使用各种形式(结构化、半结构化、非结构化所谓的schemaless),在按需计算上也是个技巧。
另一个问题,我们提到 Hadoop 一般不会说某个东西,而是指生态系统,在这里面太多交互的组件了,涉及到 IO、处理、应用、配置、工作流。在真正的工作中,当几个组件互相影响,你的头疼的维护才刚刚开始。
我也简单说几个:Hadoop Core 就三个 HDFS、MapReduce、Common,在外围有 NoSQL: Cassandra、HBase,有 Facebook 开发的数据仓库 Hive,有雅虎主力研发的 Pig 工作流语言,有机器学习算法库 Mahout,工作流管理软件 Oozie,在很多分布式系统选择 Master 中扮演重要角色的 Zookeeper.
下面是 Hortonworks 提出的数据平台,这个公司比较强势,它有最多的 Hadoop Committee 成员,是真正的标准制定者,而 2.0 就是由它们提出。
在 Hadoop 1.0 前,是 0.16 到 0.19、0.20,还有一只是 0.23 进化成现在的 2.0,应该说,现在大致都被 2.0 取代了,主要区别是 1.0 只能支持 MapReduce 框架、资源和数据处理限制在一起。
而 2.0 首先抽象出 Yarn 这个资源管理器,然后上层可以支持各种插件机制,便于扩展,Hortonworks 还研发了 Tez 作为加速引擎把一些相关任务合并共享或者并行来优化。
下面这个是英特尔给出的 Hadoop Stack,英特尔也是个对技术前沿由追求的公司,虽然它主业是处理器,但在互联网的时代,为抓住一些软件机会,它们也在积极融合,为生态系统做贡献。
另外,Cloudera 是老牌 Hadoop 公司,成立 7、8 年了,当年 Hadoop 之父就是在那做首席架构,它提出的 CDH 版本是很多公司的稳定 Hadoop 版本,一般公司也不会自己去搭 Hadoop 最新版,否则出了 Bug 会很痛苦,它提供了一个打包方便部署。
涉及技术细节甚至源代码
下面内容涉及技术细节甚至源代码,可能有些枯燥,我也尽量深入浅出。我们先说 HDFS,所谓 Hadoop 的分布式文件系统,它是能真正做到高强度容错。并且根据 locality 原理,对连续存储做了优化。
简单说,就是分配大的数据块,每次连续读整数个。如果让你自己来设计分布式文件系统,在某机器挂掉还能正常访问该怎么做?首先需要有个 master 作为目录查找(这里就是 Namenode),那么数据节点是作为分割好一块块的,同一块数据为了做备份不能放到同一个机器上,否则这台机器挂了,你备份也同样没办法找到。
HDFS 用一种机架位感知的办法,先把一份拷贝放入同机架上的机器,然后在拷贝一份到其他服务器,也许是不同数据中心的,这样如果某个数据点坏了,就从另一个机架上调用,而同一个机架它们内网连接是非常快的,如果那个机器也坏了,只能从远程去获龋这是一种办法,现在还有基于 erasure code 本来是用在通信容错领域的办法,可以节约空间又达到容错的目的,大家感兴趣可以去查询。
接着说 MapReduce,首先是个编程范式,它的思想是对批量处理的任务,分成两个阶段,所谓的 Map 阶段就是把数据生成 key、value pair 再排序,中间有一步叫 shuffle,把同样的 key 运输到同一个 reducer 上面去,而在 reducer 上,因为同样 key 已经确保在同一个上,就直接可以做聚合,算出一些 sum, 最后把结果输出到 HDFS 上。对应开发者来说,你需要做的就是编写 Map 和 reduce 函数,像中间的排序和 shuffle 网络传输,容错处理,框架已经帮你做好了。但据说,谷歌内部早不用这种,又有新的强大工具出现了。
HBase 就是对应的 BigTable 的克隆版,它是基于列的存储,可以很好的扩展型,这里面出现了 Zookeeper 作为它高可靠性的来源,我们在分布式系统中经常怕 Single Point of Failure,它能保证在少于一半节点损害情况下,还是可以工作的。
这里的 region server 是说把数据的 key 做范围划分,比如 region server1 负责 key 从 1 到 1w 的,region server2 负责 1w 到 2w 的,这样划分之后,就可以利用分布式机器的存储和运算能力了。
虽然 MapReduce 强大,但编写很麻烦,在一般工作中,大家不会直接写 MapReduce 程序。有人又开动大脑,简化开发。Hive 的简单介绍,它主要是 Facebook 开发,确实很容易上手,如果做 data scientist,经常也要用到这个工具。
我们想 MapReduce 模型有什么问题?第一:需要写很多底层的代码不够高效,第二:所有事情必须要转化成两个操作,这本身就很奇怪,也不能解决所有的情况。那么下面就看看有什么可以做的更好的。
Spark 介绍
我还是介绍一些 Spark 的起源。Berkeley AMPLab,发表在 hotcloud 是一个从学术界到工业界的成功典范,也吸引了* VC:Andreessen Horowitz 的注资。
AMPLab 这个实验室非常厉害,做大数据、云计算,跟工业界结合很紧密,之前就是他们做 mesos、hadoop online,在 2013 年,这些大牛(Berkeley 系主任、MIT 最年轻的助理教授)从Berkeley AMPLab 出去成立了 Databricks,引无数 Hadoop 大佬尽折腰,其实也不见得是它们内心这么想,比如 Cloudera 也有自家的 impala,支持 Spark 肯定会让它自家很难受,但如果你的客户强烈要求你支持,你是没有选择的
另外起名字也很重要,Spark 就占了先机,它们 CTO 说 Where There‘s Spark There’s Fire,它是用函数式语言 Scala 编写,Spark 简单说就是内存计算(包含迭代式计算,DAG 计算、流式计算 )框架,之前 MapReduce 因效率低下大家经常嘲笑,而 Spark 的出现让大家很清新。Reynod 作为 Spark 核心开发者, 介绍 Spark 性能超 Hadoop 百倍,算法实现仅有其 1/10 或 1/100.
那为啥用 Spark 呢?最直接就是快啊,你用 Hadoop 跑大规模数据几个小时跑完,这边才几十秒,这种变化不仅是数量级的,并且是对你的开发方式翻天覆地的变化,比如你想验证一个算法,你也不知道到底效果如何,但如果能在秒级就给你反馈,你可以立马去调节。
其他的如比 MapReduce 灵活啊,支持迭代的算法,ad-hoc query,不需你费很多力气花在软件搭建上。如果说你用 Hadoop 组建集群、测试、部署一个简单任务要 1 周时间,Spark 可能只要一天。在去年的 Sort benchmark 上,Spark 用了 23 分钟跑完 100TB 的排序,刷新之前 Hadoop 保持的世界纪录。
下面这个图,是 Hadoop 跟 Spark 在回归算法上比较,在 Hadoop 世界里,做迭代计算是非常耗资源,它每次的 IO 序列画代价很大,所以每次迭代需要差不多的等待。而 Spark 第一次启动需要载入到内存,之后迭代直接在内存利用中间结果做不落地的运算,所以后期迭代速度快到可以忽略不计。
此外,Spark 也是一个生态系统,除核心组建 Spark,它也可以跑在 Hadoop 上,还提供了很多方便的库,比如做流式计算,Spark Streaming,比如 GraphX 做图的运算,MLBase 做机器学习,Shark 类似 Hive,BinkDB 也很有意思,为达到高效,它允许你提供一个误差概率,如果你要求精确度越低,它运算速度就越快,在做一些模糊计算时像 Twitter 的 Follower 数目,可以提高效率。
所以总体说,Spark 是一个非常精炼的 API,提供常用的集合操作,然后本身可以独立运行,或在 Hadoop Yarn 上面,或者 Mesos,而存储也可以用 HDFS,做到了兼容并包,敏捷高效。是不是会取代 Hadoop 或成为 Hadoop 的下一代核心,我们拭目以待!
如何学习大数据
那同学们如果问如何开始学习大数据,我也有一些建议,首先还是打好基础,Hadoop 虽然火热,但它的基础原理,都是书本上很多年的积累,像 Unix 设计哲学、数据库的原理;
其次是选择目标,如果你想做数据科学家,我可以推荐 Coursera 的数据科学课程,通俗易懂,学习 Hive、Pig 这些基本工具;如果做应用层,主要是把 Hadoop 的一些工作流要熟悉,包括一些基本调优;如果是想做架构,除能搭建集群,对各基础软件服务很了解,还要理解计算机的瓶颈和负载管理,Linux 的一些性能工具。
最后,还是要多加练习,大数据本身就是靠实践,你可以先按 API 写书上的例子,能够先调试成功,在下面就是多积累,当遇到相似问题能找到对应的经典模式,再进一步就是实际问题,也许周边谁也没遇到,你需要些灵感和网上问问题的技巧,然后根据实际情况作出最佳选择。
下一篇: 奔跑吧 移动与智能硬件大数据!