【编者按】在笔者看来,语言和工具之争从来都没有太大的意义,所谓存在既有道理,如何在场景下做出最合适的选择才至关重要。本文,DeZyre公司专家Manisha Nandy Mazumder对比了Pig、Hive和SQL的区别,并为读者浅谈了一些选择标准。
以下为译文
有人说对于大数据分析来说Hadoop才是炙手可热的新技术,SQL虽然久经考验但已经有些过时了。这话说得不错,但有非常多的项目都用Hadoop作为数据存储,而以SQL构建前端查询,这说明Hadoop确实需要一种高级的查询语言。为了简化Hadoop的使用,开发人员创造出了类似于SQL的Pig和Hive。而用户在进行数据分析的时候使用这些工具可以避免Java编码,但在使用之前很重要的一点是了解工具之间的区别以便在不同的用例中使用最优化的工具。
在现在的大数据时代,开发人员有不少的查询工具可供选择。虽然SQL仍然占据着绝对的统治地位,企业对于大数据的兴趣使得Apache Pig和Hive这样的开源语言获得了不少机会。工欲善其事,必先利其器,选对平台和语言对于数据的提取、处理和分析都起着至关重要的作用。现在日趋流行的一种观点是随着大数据产业的发展,对于大数据分析的使用必须得到简化。只有在处理速度和使用门槛上下功夫大数据分析才能得到更广泛的使用。
谈到大数据,Apache Pig、Apache Hive和SQL是目前比较主流的工具,三者在合适的情况下都能体现出自己的优势。Pig和Hive、Pig和SQL以及Hive和SQL之间孰优孰劣的争论永远不会有结果,因为很难有一种语言可以适用于所有的情况。通过本文,笔者希望能够为大家提供一些选择工具和语言的技巧。在此之前我们也会对三者做些简要介绍。
SQL
SQL陪伴程序员们已经几十年了,几乎已经成为了提取数据的标准方法。大数据的出现改变了数据处理和可视化的方式,但SQL对于数据存储方式的严格要求和它声明式编程的特性使得我们的注意力不能集中在提取数据上面。尽管SQL有着广泛的应用,大数据的进步对SQL的功能和性能都提出了挑战。
PIG
SQL程序员们需要这样一种编程语言:既利于SQL程序员们学习同时又有下面这两个特点:
1. 避免SQL对数据存储的要求
2. 能够轻松应对大型数据集
Pig最初是由雅虎在2006年开发的,它很好地解决了上面提到的问题,同时也提供了较好的扩展性和性能优化。Apache Pig对Multi-query的支持减少了数据检索循环的次数。Pig支持map、tuple和bag这样的复合数据类型以及常见的数据操作如筛选、排序和联合查询。这些优势让Pig在全球范围内都得到了广泛的应用。Pig简便的特点也是雅虎和Twitter使用它的原因之一。
HIVE
尽管Pig性能强劲,要使用它开发人员必须掌握SQL之外的新知识,而Hive则与SQL非常相像。尽管Hive查询语言HQL的命令有所局限,它还是取得了一定的成功。Hive为MapReduce提供了优秀的开源实现,它在分布式数据处理的同时避免了SQL对于数据存储的局限。
我们介绍的这些数据提取、处理和分析方式都不能完全适用于所有的情况。在做出选择之前我们要考虑诸如数据存储方式、编程语言架构以及期望等因素。下面我们就把Pig、Hive和SQL两两进行对比以便了解它们各自所适用的情况。
Pig vs SQL
SQL所操作的关系型数据库速度上较Pig通过PigLatin操作的MapReduce快一些,然而关系型数据库的数据加载很有挑战性所以设置比较困难。PigLatin在声明式执行计划、ETL流程和管道的修改上则有着优势。
整体上来看SQL是一门声明式语言而PigLatin属于过程式语言。在SQL中我们指定需要完成的任务而在Pig中我们则指定任务完成的方式。Pig脚本其实都是转换成MapReduce任务来执行的,不过Pig脚本会比对应的MapReduce任务简短很多所以开发的速度要快上很多。
Hive vs SQL
SQL是一门通用的数据库语言,大量的事务和分析语句都是由SQL完成的。Hive则是以数据分析为目标所设计的,这意味着虽然Hive缺乏更新和删除这样的功能但读取和处理大量数据的速度会比SQL快得多。所以Hive SQL看起来像SQL但在更新和删除等功能上两者还是有很大区别的。虽然有所不同,但如果你有SQL背景的话学习起Hive还是很容易的。不过要注意两者在构造和语法上的区别否则容易混淆。
现在我们已经对三种数据挖掘语言进行了介绍和对比,接下来就来分析一下三种语言最适用的情况。
1. 什么时候用Apache Pig
当你需要处理非格式化的分布式数据集时,如果想充分利用自己的SQL基础,可以选择Pig。使用Pig你无需自己构建MapReduce任务,有SQL背景的话学习起来比较简单,开发速度也很快。
2. 什么时候用Apache Hive
有时我们需要收集一段时间的数据来进行分析,而Hive就是分析历史数据绝佳的工具。要注意的是数据必须有一定的结构才能充分发挥Hive的功能。用Hive来进行实时分析可能就不是太理想了,因为它不能达到实时分析的速度要求(实时分析可以用HBase,Facebook用的就是HBase)。
3. 什么时候用SQL
SQL是这三者中最传统的数据分析手段。随着用户需求的改变SQL本身也在进行着更新,所以即便到了今天也不能说SQL过时。对于专业的数据分析师来说SQL当然比Excel强多了但要用它来进行快速的复杂处理和分析还是显得有点欠缺。如果所进行的分析比较简单的话SQL仍然是一个非常趁手的工具。它历史上的广泛使用和灵活性也使它广受开发人员欢迎。大部分开发人员都对SQL有所了解所以使用SQL的话开发人员从项目开始的第一天就能有所产出。SQL提供的扩展和优化功能也让我们能够根据需求进行定制。
显然不同的数据没有一个所有情况都适用的查询工具,根据自己的需求来选择不同工具才是正确的方法。