大数据那些事(7):腾飞的拉丁猪

2007到2008年的Hadoop世界,是Hadoop发展历史上非常关键的一年。这一年Yahoo Research 发表了Pig Latin的paper 在 SIGMOD2008上。之后HIVE也出来了。Pig的出现标志着Hadoop的community从此走上了一条和Google分道扬镳的道路,标志着大数据近代的到来,在我眼里,这个变化是具有历史意义的里程碑式的大事件。

MapReduce这个非常傻的模型的出现,让人们一下子发现原来大规模的并行计算可以这样来做,写个Mapper 写个Reducer,再写个Mapper,再写个Reducer,…,搞定。但是我想除非是疯狂程序猿,大部分人对于这种新时代的原始社会编程方式多半会疯掉。这毕竟不像SQL,写个SELECT FROM WHERE就搞定了。为了查点数据,还得你妹的写JAVA写C++写Python。到底是系统有病还是程序猿有病。

这个问题Google内部也遇到了。有过一些尝试,最后在Google内部胜出的是Flume。Flume开始叫Flume Java因为只支持JAVA,后来也加了C++,所以就改了名字。注意这个不是开源社区的那个Flume。开源社区的人做了一个Apache Crunch的东西,那个才是Flume Java的copycat。当然这个项目其实没多大的影响力。Google的套路基本上还是程序猿的套路,大家来写Java啊C++啊,调用API,后面则提供优化啊之类的。因为不是今天这篇文章的重点,大家有兴趣深入研究可以去看Flume Java的论文或者等我后续的文章里来讲。

开源社区走向了另外一条道路。这条道路其实更多的像是SQL的。使用一种高级语言,然后在很高的层次上表明自己想做什么,和Java啊C++啊之类的东西没半毛钱关系。所以说Pig的出现表明开源社区走向了一条更受传统database的影响的做法,而非Google做什么大家跟进什么。这成为以后开源社区百花齐放的非常有意义的一步。因此,在我看来,拉丁猪飞起来的这一年,对开源大数据社区,有着极其重要的意义。

很多人喜欢比较Pig和Hive。当然我接下来也会讲Hive,但是今天不得不嫌提一句,我个人的倾向。我觉得设计理念上,我更喜欢Pig,但是Pig Latin也体现了所谓研究人员学究的那一面。时至今日,我们必须说Pig是被大部分人放弃了。

我在这里假设大家都知道Pig长什么样了。如果不知道,请大家参阅原始论文:Pig Latin:A Not-So-Foreign Language for Data Processing,或者其他的资料。我喜欢Pig是因为这个语言解决了SQL长期以来最为诟病的一个问题。Pig是一个data flow language,所以我们可以把一行命令的结果赋值给一个临时的变量,然后在后续的处理中引用这个变量作为下一个命令的输入。这使得我们需要写nested query的概率大大的降低了。SQL这个东西就是简单的query很简单。一旦开始nesting了,那么可以写出鬼和神仙都看不懂的SQL,当然我更看不懂。至于Pig引入的Load和Store作为输入输出的方式,我觉得schemaless也是一种选择,相对于Hive基于metadata store的方式来说更具备灵活性。总而言之这是一款很容易上手,上手以后写出复杂的东西也可以被分割成为相对简单的逻辑和data flow来理解的语言。对于做比较复杂的数据处理尤其显得合适。

但是我们必须说文人相轻的传统在学术圈里也同样适用。No zuo no die更是在哪里都是成立的。但凡研究猿做出来的东西,总是透着一股子酸味的不接地气。我想这群写出Pig Latin的人骨子里肯定看不起SQL,看不起到连做Filter不会用WHERE却偏偏要发明自己的Filter,Join不叫Join非要叫CoGroup。如果是这不是有病的话,那只能是自掘坟墓了。在这个SQL大行其道这么多年的数据处理市场里,如果你要搞出一个想要做SQL的事情,却偏偏要按上一个不是SQL的syntax,唯一的结果就是被抛弃,再抛弃。这种反复被历史验证的事情,只有研究猿才愿意不断的推陈出新,一个好东西就这样给糟蹋了。

倘若我来设计Pig的话,我想Load和Store我会保留,只是凡是和SQL功能差不多的地方都会用上SELECT FROM WHERE的样子。我会尽可能的禁止所谓的subquery,让每个命令行尽量的简介。我想我会在Pig里一开始就引入类似HCatlog那样的东西,使得Pig有Hive一样的表的概念,但是同时并不禁止通过Load和Store直接的凭空产生数据和分析。与其做Pig Latin,不如做Pig SQL。据说Pig SQL曾经也是一个立项,但是伴随Yahoo的不景气,这项目就咔嚓了。

最为有意思的事情莫过于Yahoo spin off了Hortonworks以后,原来做Pig的跑去了Hortonworks,改行做Hive了。总之,Pig是一个本来可以有机会成为很伟大的语言的东西,活生生的给研究猿们不接地气的糟蹋了。我想写Pig的人做Hive,发明Pig的公司拆分出来的Hadoop 批发商成了Hive开发的主力,这画面不得不说非常的美啊。大家好好欣赏一下吧。
转自:飞总聊IT