一、Hive概述
1.1 什么是Hive
Hive是建立在Hadoop上的数据仓库,提供了一系列工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。
数据库:
mysql、oracle、sqlserver、DB2、sqlite、MDB
数据仓库
Hive,是MR的客户端,也就是说我们不必要在所有的机器上都安装部署Hive
1.2 Hive的特征
1)操作接口是采用SQL语法,我们在Hive中称之为HQL
2)避免了写MapReduce的繁琐过程,内嵌SQL解析引擎,将SQL语句转译成M/R Job然后再Hadoop上执行
3)Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据
1.3 Hive体系结构
1)Client(用户操作接口)
终端命令行
JDBC--不常使用,相对于前者非常麻烦
2)metastore(元数据存储)
Hive 将元数据存储在数据库中(metastore),目前只支持 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
3)解释器、编译器、优化器
完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapReduce 调用执行
4)Server(由Hadoop提供)
Hive的数据存储在HDFS中,用MapReduce进行计算
1.4 HIVE的mateStore
mateStore是Hive存储元数据的地方,默认使用内嵌的derby数据库作为存储引擎
derby弊端:一次只能打开一个会话
mysql:使用mysql作为外置引擎,多用户可以同时访问
二、Hive的常用配置
2.1 修改hive文件存储位置
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
2.2 修改hive在HDFS中文件权限
[root@test04 conf]# hadoop fs -chmod 777 /tmp
2.3 显示数据库名称
<!--显示数据库名称以及字段名称-->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
<!--是否在当前客户端显示当前所在数据库名称-->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
三、Hive的运行原理