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),在按需计算上也是个技巧。
问:MapReduce模型有什么问题?
第一、需要写很多底层的代码,不够高效。第二、所有的事情必须要转化成两个操作Map或Reduce,这本身就很奇怪,也不能解决所有的情况。
问:Spark从何而来?Spark相比于Hadoop MapReduce设计上有什么样的优势?
其实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都采用了哪些大数据开源技术?
在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写书上的例子,做到有能力调试成功。再下面就是多积累,当遇到相似的问题时能找到对应的经典模式。然后就是实际问题了,也许周边谁也没遇到过这样的问题,你需要灵感和在网上问问题的技巧,然后根据实际情况作出最佳选择。
本文转载
图灵社区——图灵访谈栏目