ITPub博客

首页 > 大数据 > Hadoop > Hive学习

Hive学习

原创 Hadoop 作者:biggerl 时间:2015-03-04 15:42:26 0 删除 编辑

Hive

一、简介

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


                                            hive结合HBase

                                    reduce阶段写入HBase的方式的逻辑图

三、实现

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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Hbase学习
下一篇: Python pip安装
请登录后发表评论 登录
全部评论

注册时间:2014-10-24

  • 博文量
    39
  • 访问量
    96958