<audio id="audio" title="080 | 亚马逊的大数据故事：从先驱者到插管吸血开源" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/be/c7/bed4add6db314e924b7302d5372365c7.mp3"></audio>

全球的互联网大公司里面，如果说哪家公司最有争议性，亚马逊肯定是其中之一。在大数据发展历程中，亚马逊扮演的角色相当复杂，既曾是先驱者，也曾作为“吸血者”插管吸血开源社区。

此外，**亚马逊不仅充分利用Hadoop生态圈壮大了自己，而且推出了一些特色化服务。亚马逊的大数据发展比较复杂，它既有对大数据发展作出里程碑式贡献的一面，也有利用了大数据圈的技术大量“插管吸血”却并不回馈社区的一面。** 今天，我们一起来看看亚马逊的大数据故事。

## Dynamo：NoSQL的先驱之一

除了谷歌，其他公司（比如微软）也或多或少对于大数据时代的发展有一些特色贡献。但**只有亚马逊的这篇名为《Dyanmo：亚马逊的高可用键值存储》（Dynamo: Amazon’s Highly Available Key-value Store）的论文，是唯一一篇可以和谷歌“三驾马车”并驾齐驱，具有同样影响力的论文。** 这篇论文发表于2007年的操作系统顶级会议SOSP上，它们共同开启了大数据时代。

在2017年上海举办的SOSP会议上，这篇论文荣获了SIGOPS 名人堂奖（Hall of Fame Award, HoF）。这是操作系统领域里面的大奖，专门用来表彰那些发表10年以上，对业界产生了深远影响的论文。

Dynamo和BigTable功能上很像，也是一个NoSQL。但是两者在实现方式上非常不一样。简单来说，BigTable基于排序来实现的 ，而Dynamo则基于哈希去实现，当然技术细节不在本文的探讨范围之内。但是，值得注意的是，亚马逊第一次给大家展现了一个全新的键值存储系统（Key-Value Store）是怎么实现的。

Dynamo也有开源的产品实现，即Cassandra。Cassandra先由Facebook开发并开源，后期则由DataStax公司维护。亚马逊AWS把Dynamo以DynamoDB的名字推出来给客户使用，现在DynamoDB是AWS历史最为悠久、用户量最大的产品之一。

**Dynamo论文发表之后，据说在亚马逊内部掀起了轩然大波。很重要的一个原因是，亚马逊传统上是不发表自己的核心技术的。** 所以虽然说亚马逊有全世界最好的编译和软件部署系统阿波罗（Apollo）和最好的版本控制系统巴西（Brazil），但是外界对于亚马逊到底是怎么实现这些东西的并不知晓。

谷歌也在一定程度上奉行这个策略，但是要好一些。比如说，谷歌虽然公布了“三驾马车”，但那是在技术成熟，下一代产品基本就位的时候才公布上一代产品的。至于谷歌最核心的基于容器的调度系统，则有十余年一直被当作核心机密。直到2015年，因为Docker已经大行其道了才公开。

而亚马逊基本上是完全不公布的政策，而Dynamo显然打破了这个规则。有传言贝佐斯对于Dynamo团队发表这篇论文，导致亚马逊核心技术泄露表达了强烈不满。这个传言真假不得而知，但是不管怎样，我们能够看到亚马逊后来在核心技术论文发表方面，又小心翼翼起来。

## Elastic MapReduce

如果说Dynamo和后来商业化的DynamoDB是亚马逊带给整个大数据领域不可磨灭的贡献，亚马逊作为大数据的“先驱者”也因为这篇论文而名垂青史了，Elastic MapReduce这个云端产品带给亚马逊的则是滚滚财富。

伴随着Hadoop生态系统的成熟，很多围绕这个生态圈的创业公司诞生了，这包括后来很著名的Hadoop三大发行商：Cloudera、Hortonworks和MapR。亚马逊作为一个云厂商，也进入了这个市场，它推出的产品叫作Elastic MapReduce。

在如何对待开源产品这个事情上，我们必须说，亚马逊和其他公司有很大不同。其他公司不论出于什么样的目的，都或多或少对开源产品本身做出了很大的贡献。Hadoop的三大发行商在很大程度上维护了Hadoop基础架构的开发，Cloudera和Hortonworks一度是Pig和Hive最重要的维护者。各大社交媒体公司也纷纷开源了很多自己的系统，来丰富整个生态圈。这些公司都对Hadoop核心代码做出了很多贡献。

但是亚马逊对于整个Hadoop生态圈的贡献，除了如何去连接它自己的云服务（比如S3）以外，善乏可陈。亚马逊做的事情，典型的做法就是把已成熟的开源社区产品拿过来，在内部做二次开发，以便能够在亚马逊的云端很好得运行。然后，就没有然后了。亚马逊并不会给开源社区贡献自己的核心代码。

一方面来说，因为Hadoop生态圈本身就意味着对机器资源的大规模消耗。所以任何使用Hadoop的人，在亚马逊的AWS服务上，都必然会支付不菲的金钱。因此，亚马逊的AWS得到了快速发展。

另外一方面，S3本身就是世界上最大的存储服务，无数公司把数据存储在S3里。AWS的Elastic MapReduce可以有效整合S3的数据读写，这也让用户更加离不开AWS这个生态圈。

如果我们回过头来看，整个大数据历史的发展中，如果说哪个公司最得利，没有任何一家公司比得上亚马逊的，大数据的发展很大程度上也是亚马逊云计算业务的发展过程。那么，亚马逊对开源的贡献是什么呢？对Hadoop生态圈的贡献又是什么？或许，在这一点上还是未来值得思考和期待的事情吧。

有关亚马逊的大数据先驱者和“插管吸血”开源社区的故事就讲到这里了。亲爱的读者，你觉得这种状态是Hadoop开源社区错了，被亚马逊“合理利用”了呢？还是亚马逊本身的做法值得商榷呢？


