一、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安装
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中师徒不能存数据。
按照session号进行归组,并按照查询次数进行排序,最终显示查询次数最多的前10条。
hive>select WEBSESSION,count(WEBSESSION) as cw from SOGOUQ1group by WEBSESSION order by cw desc limit 10;