一、HIVE简介

Hive的设计目标是为了分析查询结构化的海量数据

1.     hive是建立在hadoop上的数据仓库基础构架

2.     用来进行数据提取转化加载(ETL)

3.     Hive定义了简单的SQL查询语言,SQL语句转译成M/R Job然后在Hadoop上执行

4.     Hive表其实就是HDFS的目录(实操)

 

数据仓库的元数据信息:数据仓库中可以存数据库,数据库中可以存储数据表,而这些数据仓库中的数据库(表)的名字、所属用户、表属于哪个数据库、有哪些字段(。。。。之类的描述信息)都称为元数据信息。

二、Hive的metastore

1.     Metastore是hive元数据的存放地

2.     Metastore使用hive内嵌的derby数据库作为存储引擎

3.     Derby缺点:一次只能打开一个会话

4.     使用MySQL作为 hive 的外置存储引擎,存放metastore,供多用户同时访问

hive元数据INDEX_PARAMS Hive元数据的集中存放地是?( )_Hive


 

三、HIVE安装

3.1 解压HIVE、配置profiel(HOME、PATH)

3.2 将MySQL的连接包导入${HIVE_HOME}/lib

3.3 安装MySQL数据库,启动并创建Hive表

此时Hive表为空

3.4 Hive配置(conf)hive-site.xml

注意改URL地址、用户名、密码

3.5 启动Hive

此时进入mysql,在hive表中有很多表

VERSION                    存储版本                   select  *  fromVERSION

DBS(s表示仓中可有多个库)         存储数据库元数据(有一个默认的)

TBLS                          存储数据表元数据                               (空的)

(外部表和内部表:都是HDFS上的一个目录,外部表可指定目录,内布表默认目录)

3.6例子:

 

CREATE DATABASE IF NOT EXISTS SCHOOL;(mysql中databases多一个)

CREATE ETERNAL TABLE IF NOT EXISTS school.student(stuid INT, stuname STRING)

ROW FORMAT DELIMAITED

FIELDS TERMINATED BY ‘\t’

STORED AS TEXTFILE

LOCATION ‘/school/201606’;                (外部表指定目录)

 

灌库到’/school/201606’

(hdfs dfs –put aaa.txt /school/201606)

Hive>select * from student;

SELECT stuname,count(*) FROM student group by stuname;

四、Hive数据模型

4.1hive的数据存储类型

Hive中使用了4个主要的数据存储类型:表(内部表)、外部表、分区和桶

4.1.1 内部表

内部表存储在默认的HDFS目录下,删除表时数据也被删除

4.1.2       外部表

数据不在Hive的数据仓库中,到仓库目录以外的位置访问数据,删除

表时,只删除元数据。

4.1.3       分区(按分区列

依据一定的条件对数据进行一定的分区----降低扫描数,提高查询效率。Hive中分区的数据表在存储时会以多级目录的方式进行存储。

{eg:学生表根据gender分区

 

>Create table partition_table(sid int ,sname string)
Partitioned by (gender string)
Row format delimited fields terminated by ‘,’;
>desc partition_table;
>insert into table partition_table partition(gender=’M’) select * from sample_data where gender=’M’; 
>insert into table partition_table partition(gender=’F’) select * from sample_data where gender=’F’; 
}

(备注:sample_data中有sid , sname, gender,还有好多字段)

 

查询HiveQL执行计划查看效率。(explain查看执行计划)

 

hive> explain select * from sample_data where gender=’M’;       ①
hive> explain select * from partition_table where gender=’M’;     ②

①  长②短,执行计划从下往上读

 

4.1.4       桶(按指定列作为划分样本

{eg:学生表根据姓名分桶

>Create table bucket_table(sid int ,sname string,age int)
clustered by (sname) into 5 buckets;

(备注:sample_data中有sid , sname, gender,还有好多字段)

 

延伸—>视图(虚表)

hive>create view empinfo
   >as
   >select e.empno, e.ename, e.sal, e.sal*12 annlsal, d.dname
   >from emp e, dept d
   >where e.deptno=d.deptno;

 

数据库中视图可以存数据,但是HIVE中师徒不能存数据。

Eg: 查询次数排行榜

按照session号进行归组,并按照查询次数进行排序,最终显示查询次数最多的前10条。

hive>select WEBSESSION,count(WEBSESSION) as cw from SOGOUQ1group by WEBSESSION order by cw desc limit 10;