什么是HIVE
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。hive参考手册
什么是pig
pig是在HDFS和MapReduce之上的数据流处理语言(脚本语言),它将数据流处理翻译成多个MapReduce函数,提供更高层次的抽象将程序员从具体的编程中解放出来。pig参考手册
不同的方式做同样的事情(Two ways of doing same thing)
1、都是使用高层次的语言生成MapReduce任务
2、都使Users不用了解MapReduce与HDFS的细节
基本信息对比
| HIVE | Pig |
---|---|---|
开发者 | | Yahoo! |
语言 | HiveQL | Pig Latin |
语言类型 | 类似SQL查询语言 Select * from mytable | 数据流处理语言,由一系列的operation和transformation组成。 每个操作或变换对输入进行数据处理,然后产生输出结果 A = LOAD ‘mydata’ AS (Col1:chararray, Col2:int) B = GROUP A BY (Col2) Dump B |
用户 | 在Analysts中更流行 | 在Programmer与Researcher中更流行 |
使用模式 | Analysts:生成日常报表 | Programmer:写复杂的数据管道 Researcher:特设分析(ad-hoc),例如机器学习 |
发展方向 | Hive朝着数据仓库的方向发展, 使用者要求与其他系统更好的结合(O/JDBC) | Pig朝着语言的方向发展,使用者要求有更好的开发环境 例如调试器,编辑器 |
细节对比
特性 | HIVE | Pig |
---|---|---|
模式/类型(Schemas/Types) | 支持(显示的) | 支持(隐式的) |
分区(partitions) | 支持 | 不支持 |
用户自定义函数(UDF) | 支持(Java) | 支持(Java) |
自定义序列化(Serializer/Deserializer) | 支持 | 支持 |
直接访问DFS | 支持(隐式的) | 支持(显式的) |
Join/Order/Sort操作 | 支持 | 支持 |
Shell命令 | 支持 | 支持 |
网络接口 | 支持 | 不支持 |
JDBC/ODBC | 支持(有限的) | 不支持 |
1、两者均不支持事物与索引,全盘扫描是常态
2、两者均不支持随机读与实时查询
总结
直接使用Hadoop的Java APIs实现MapReduce任务是乏味和容易出错的,同时也限制了编程的灵活性。于是Hadoop提供了两个解决方案使得编程变得更加容易,即Hive与Pig。
Hive主要用于静态的结构以及需要经常分析的工作,并且Hive与SQL相似促使其成为Hadoop与其他BI(商业智能)工具结合的理想交集。
Pig相比Hive相对轻量,Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的应用程序。