今天再聊聊 Hadoop 生态圈。话说前文已经提到了雅虎硬是用自己的业务把 Hadoop 搞出来了,最后也不知道什么原因把辛辛苦苦地弄出来的 Hadoop 给开源了。于是硅谷的一堆当时还在创业时,现在已经庞然大物的公司拥了上去,把 Hadoop 生态圈搞起来了。
在 Hadoop 生态圈里,雅虎除了贡献了核心的 HDFS 和 MapReduce 外,还开源了 Zookeeper 和 Pig 。
Zookeeper 是一个分布式系统的协调服务框架,经常用于分布式系统里的数据管理问题。Zookeeper 的用途非常广泛,比如 Hbase 、老版本的 Kafka 都使用了 Zookeeper 来协调。
刚开始的时候,大家写 MapReduce 程序要写各种花式的 Mapper 和 Reducer ,像一般的排序都要写两三个。嗯,写过 MapReduce 程序的人大概都清楚这里面的麻烦,在这里想 @ 下前同事。要是总这么弄,也就程序员能玩了,根本推广不开。人类总是很懒惰的,于是搞出了高级语言,然后“翻译器”把高级语言翻译成 MapReduce 程序。
Pig 是 Hadoop 生态圈里的第一个高级语言,它的编译器可以把写好的脚本翻译成原生的 MapReduce 程序,也让用户第一次摆脱了 MapReduce 的繁琐,当然这还不是最完美的。Pig 现在基本上是“死亡”状态,感兴趣的可以研究下,用过几次,个人不是很喜欢它的风格。
既然说到了高级语言,那就不可不提 Hadoop 生态圈里的 Hive 。在数据领域里,凡是玩存储和处理的不支持 SQL 的十有八九推广不了。毕竟谁都能写几句 SQL ,但是编程语言这种东西还是相对较难的。Hive 就是让程序猿可以用 SQL 告诉系统我要干什么,至于怎么执行、优化和处理交给系统去做就行了。
Hive 是 Facebook 弄出来的东西,有段时间专门读过 Hive 的代码,嗯,一言难尽。后来读文献,有人评价 Hive 的“源码 Bug 比较多,维护难度大”,我是比较认同的,写这篇文章之前又专门的去 GitHub 上翻了下,现在的代码质量好了些。
先不论 Hive 本身,至少 Hive 第一次实现了 SQL 。第一个玩家只要不乱搞,代码再差,最后还是在某种程度上已经成为了 SQL On Hadoop 类型项目的标准,无论是后起之秀 Spark 还是 Flink (新版本支持 Hive 元数据了)都不约而同的兼容了 Hive ,特别是 Hive 的元数据,更是无数 Hadoop 生态圈里 SQL 项目必须兼容的一项。
Facebook 除了搞出了 Hive,后面交互式查询兴起的时候,又弄出来 Presto ,Hive 的维护主要就是开源社区自己在做了。
今天先聊到这,下一篇文字再聊数据存储领域的历史。