一、基本概念

1)建立在Hadoop上的数据仓库基础架构。它提供一系列工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询、分析存储在Hadoop中的大规模数据的机制。定义简单的类SQL查询语言称为QL,允许熟悉SQL的用户查询数据。



2)Hive是SQL解析引擎,它将SQL语句转译成M/R Job,然后在Hadoop执行。






3)Hive的表其实是HDFS的目录/文件,按照表名把文件夹分开;如果要分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据


4) Hive 使用hdfs数据存储;提供类似SQL语言(HQL),能够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行。类似的系统: yahoo的 pig




二、Hive架构



1001-hive基本概念_Hive



Hive 的结构可以分为以下几部分: 



1)用户接口:包括 CLI, Client, WUI



——Cli 启动的时候,会同时启动一个 Hive 副本



——Client 是 Hive 的客户端,用户连接至 Hive Server,在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server









2)元数据存储。通常是存储在关系数据库如 mysql, derby 中。 Hive的默认数据库为Derby

——Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等






3)解释器、编译器、优化器、执行器

——生成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行




4)Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算 



——大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapRedcue 任务)






三、Hive和Hadoop关系



1001-hive基本概念_Hadoop_02



Hive 构建在 Hadoop 之上,
1)HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的
2)所有的数据都是存储在 Hadoop 中
3)查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任务,如:select * from table)
4)Hadoop和Hive都是用UTF-8编码的




四、Hive和普通关系数据库的区别



 

Hive 

RDBMS 

查询语言 

HQL 

SQL 

数据存储 

HDFS 

Raw Device or Local FS (设备或者本地文件系统中)

索引 

无 

有 

执行 

MapReduce 

Excutor 

执行延迟 

高 

低 

处理数据规模 

大 

小 



五、Hive元数据库



Hive 将元数据存储在 RDBMS 中,一般常用的有MYSQL和DERBY,存放元数据的Derby数据库迁移到Mysql数据库



六、Hive数据存储



1)Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。



2)Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:Table,External Table,Partition,Bucket。



——Hive 中的 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 t_order,它在 HDFS 中的路径为:/ warehouse /t_order



——Partition 对应于数据库中的 Partition 列的密集索引,Hive 中 Partition 的组织方式和数据库中的很不相同,在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。




参考资料:



http://wenku.baidu.com/view/91d1db3887c24028915fc352.html?re=view



http://wenku.baidu.com/view/4bb0332a3169a4517723a3f5.html