更新时间:2017-09-01 来源:黑马程序员云计算大数据培训学院 浏览量:
Pig与Hive 谁才是未来?
2-1 背景
SQL
结构化查询语言(SQL)是程序员的最佳伴侣,主要用于处理和提取数据。大数据改变了数据处理和可视化的方式。但是SQL严格的关系数据库模式和声明特性依然是数据分析的标杆。尽管SQL市场广阔,但是大数据也对SQL的功能和性能提出了挑战。
Pig
Apache Pig适合有SQL背景的程序员学习,其有以下两个特点:
1.放宽了对数据存储的要求
2.可以操作大型数据集
除了上述特点,它还有很好的可扩展性和性能优化。 Apache Pig允许开发人员跟踪多个查询方法,从而降低了数据的重复检索。它支持复合数据类型(Map、Tuple、Bag),支持常见的数据操作,例如筛选、排序和Join。Apache Pig的这些特性得到了世界各地用户的认可。
Hive
尽管Apache Pig性能优异,但是它要求程序员要掌握SQL之外的知识。Hive和SQL非常相似,虽然Hive查询语言(HQL)有一定的局限性,但它仍然是非常好用的。Hive为MapReduce提供了很好的开源实现。它在分布式处理数据方面表现很好,不像SQL需要严格遵守模式。
数据的提取、处理和分析没有一个万全之策,需要综合多种因素来选择,例如数据存储方法,编程语言结构以及预期的结果。下面我们就来对比一下Pig、Hive和SQL,看看它们各自都适合什么样的场景。
2-2 Pig工作原理
Apache PIG提供一套高级语言平台,用于对结构化与非结构化数据集进行操作与分析。这种语言被称为Pig Latin,其属于一种脚本形式,可直接立足于PIG shell执行或者通过Pig Server进行触发。用户所创建的脚本会在初始阶段由Pig Latin处理引擎进行语义有效性解析,而后被转换为包含整体执行初始逻辑的定向非循环图(简称DAG)。
另外,这套处理引擎亦可接受DAG并在内部执行计划优化——具体优化方式包括PIG程序方法以及惰性计算。
为了理解这一优化机制的原理,我们假定用户编写了一套脚本,该脚本对两套数据集进行一项连接操作,而后是一条过滤标准。PIG优化器能够验证过滤操作是否能够在连接之前进行,从而保证连接负载最小化。如果可以,则其将据此进行逻辑规划设计。如此一来,用户即可专注于最终结果,而非将精力分散在性能保障身上。
只有在经过完全优化的逻辑规划准备就绪之后,编译才会生效。其负责生成物理规划,即为最终驻留于HDFS中的数据分配与之交互的执行引擎。
2-3 Hive工作原理
Apache Hive在本质上属于一套数据仓储平台,用于同存储在HDFS或者HBase内的大规模结构化数据集进行交互。Hive查询语言在这一点上类似于SQL,二者都能够与Hadoop实现良好集成。而Pig则不同,其执行流程为纯声明性,因此适合供数据科学家用于实现数据呈现与分析。
在与Hive进行交互时,用户可以直接通过Hive命令行界面直接接入,或者与Hiveserver交互。任何提交查询都会首先由该驱动程序占用,而后由编译器进行语法及语义验证。另外,Hive metastore负责保存全部与Hive相关数据的模式/映射关系,其在验证查询中信息语义方面扮演着重要角色。
该驱动立足于语义之上执行优化,同时负责准备执行规划并将其提交至HQL查询引擎。这套引擎依赖于实际执行引擎(例如MapReduce与Spark等)。任何对模式的成功修改都会通过HQL处理引擎被更新至metastore当中。
2-4 总结
Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使 其成为Hadoop与其他BI工具结合的理想交集。而且很多企业都需要对历史数据进行分析,Hive就是一款分析历史数据的利器。但是Hive只有在结构化数据的情况下才能大显神威。Hive的软肋是实时分析,如果想要进行实时分析,可以采用HBase。
Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的 应用程序。并且Apache Pig适用于非结构化的数据集,可以充分利用SQL。Pig无需构建MapReduce任务,如果你有SQL学习的背景,那么入门会非常快。
Pig相比Hive相对轻量,它主要的优势是相比于直接使用Hadoop Java APIs可大幅削减代码量。正因为如此,Pig仍然是吸引大量的软件开发人员。
所以二者皆提供出色的灵活性以及可扩展性,用于实现各类定制化功能。另外,二者也拥有自己的明确角色定位,因此其具体优劣完全取决于您在项目当中的实际要求。
本文版权归黑马程序员云计算大数据培训学院所有,欢迎转载,转载请注明作者出处。谢谢!