hive是一个基于hadoop的数据仓库。使用hadoop-hdfs作为数据存储层;提供类似SQL的语言(HQL),通过hadoop-mapreduce完成数据计算;通过
HQL语言提供使用者部分传统RDBMS一样的表格查询特性和分布式存储计算特性。架构图如下:
语言一般有DDL和DML两种:hive采用DDL方式和少量DML方式,类似sql;pig使用DML方式。
DDL:data definition language
{create/alter/drop}{table/view/partition}
create table as select
DML:data manipulation language
insert overwrite
hive示例
|
加载 |
load data local input ‘/logs/urls.txt’ into table urls partition (ds=’2010-01-01’); |
|
写入 |
INSERT OVERWRITE TABLE result |
|
操作 |
SELECT category, AVG(pagerank) FROM urls WHERE pagerank > 0.2 GROUP BY category; |
1、分区(partition):
建表的时候指定分区方式:
CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
导入的时候指定分区依据:
LOAD DATA LOCAL INPATH 'file' OVERWRITE INTO TABLE tablename PARTITION (ds='2008-08-15');
2、类似 select * from tbl 的查询不需要 MapReduce。
3、hive不只是可以mapreduce


1、元数据(Metadata)
hive的元数据存储在传统的RDBMS中,现在为mysql中。
原因:访问这些Metadata,我们想要“很低的延时”,而存在hdfs中是无法满足。(元数据对hive是相当重要的,因此一般要求有备份机制)
使用:元数据都是在HQL语句编译的时候,就被生成一个xml文件(包含此次编译所有需要的元数据信息)存储在hdfs中,然后运行mapreduce时传递给mapper和reducer。(减少后期访问)
2、解析(query parser)
这一步是实现中最主要的操作,即架构图中Driver的大部分。
解析(parse)
使用antlr解析HQL语句,并产生AST(abstract syntax tree)。
类型检测和语义分析
分析所有输入输出的table,并创建logical-plan。通过一种中间表示结构query block(QB)tree,将AST转换成operator-DAG:将嵌套的queries变成父子关系的QB-tree。
优化(Optimization)
通过operator-DAG的中“元素的前后满足关系”生成一些操作(operator)。主要的五个元素为:Node, GrahpWalder, Dispatcher, Rule, Processor:
GraphWalker遍历(walk)DAG中所有的Node,并检查一个Rule是否满足,在满足的条件下回出发一个对应的Processor。Dispatcher则维护Rule到Processor的映射,并进行Rule的匹配工作。

physical plan的生成
根据上一步的结果,分解成一些map/reduce操作,并将最终结果(即一些plan的xml文件)写入到hdfs。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29974949/viewspace-1448121/ ,如需转载,请注明出处,否则将追究法律责任。