Spark入门实战指南——HIVE

一、HIVE简介

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

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

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

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

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

 

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

二、Hivemetastore

1.     Metastorehive元数据的存放地

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

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

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

 

三、HIVE安装

3.1 解压HIVE、配置profielHOMEPATH

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

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

此时Hive表为空

3.4 Hive配置(confhive-site.xml

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

3.5 启动Hive

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

VERSION                    存储版本                   select  *  fromVERSION

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

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

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

3.6例子:

 

CREATE DATABASE IF NOT EXISTS SCHOOL;mysqldatabases多一个)

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 stringage 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值