1.Hive架构设计概念
user interface :hive cli,hive client,hwi
Hive CLI(hive command line interface):Hive命令行交互模式,默认支持
Hive Client(jdbc/odbc/beeline):Hive jdbc交互模式,外部程序或者服务对接的必选项
HWI (hive web interface):Hive web交互模式,cli模式的补充
HiveServer2:以Thrift为基础实现的跨语言的接口调用,并支持多客户端的并发和认证
Driver (SQL Parser Query Optimizer Excution):Hive核心驱动器接口类,衔接UI与内核的解析、优化、执行器的桥梁
MetaStore (Mysql,Derby):Hive元数据存储,包括库、表、分区、可嵌入式、本地、远程独立部署
2.Hive运行流程:
(Hive CLI,Hive Client-->HiveServer2,HWI) -->Driver <-->MetaStrore
3.Hive是构建再hadoop上的数据仓库框架,解决了非开发人员使用hadoop的问题,Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质是将HQL转换为MapReduce程序(可以看做对MapReduce的封装)
4.Hive非常适合数据仓库中,对时延要求不那么敏感的场景。低时延的使用Hbase
5.Hive主要用于查询,不支持行级别的update和delete
6.传统仓库区别: Orcal 是单机, Hive基于HDFS分布式
7.读时模式:shema on read 为了更好的写入数据,在读的时候进行模式检查
8.写时模式:shema on write 为了更好的查,在写的时候进行模式检查
9.Hive meta data 2中存储方式: 内置Derby 有目录缺陷和单会话缺陷 Mysql
10.HQL语句不识别TAB分隔
11.元数据 metadata
原数据 original data
源数据 source data
12.Hive常用命令:
1.执行Hadoop命令: dfs -ls /user/....
2.执行linux命令:! ls /user/...
3.Hive命令行中默认显示库名
cd ~
vi .hiverc
set hive.cli.print.current.db=true; -->显示库名
set mapred.job.name=hive-cli-01; -->显示job名
13.Hive数据模型: 库,表,分区,分桶
14.Hive表分类:
分类1:内表(托管表,管理表):删除元数据,真实数据
外表(external):只删除元数据
分类1使用场景:数据只为hive使用,建立内表
数据还可能给hive以外的程序使用,数据本身就是给hive以外的程序建立的使用,hive只是共享使用,使用外表
分类2:普通表,分区表,分桶表,分区分桶表
15.Hive数据类型基本类型
数值(tinyint,smallint,int,bigint,float,double),string,boolean,timestamp,binary
16.Hive数据类型之复杂类型:array,map,struct
1.select形式输入:
select array(1,2,3);
select map("a",1,"b",2);
select struct(1,2)
2.建表字段为复杂类型
create table table_name (
info_1 array<String>,
info_2 map<String,String>
info_3 struct<addr:string,mail:string>
info_4 struct<col1:string,col2:string>
)
row format delimited
fields terminated by ','
collection items terminated by '::'
map keys terminated by '\003';
3.insert复杂类型
insert into emp01 select 'tom',array('english','chinese') from dual;
insert into userinfo select 'tom',map('type','chinese') from dual;
insert into userinfo select 'tom',struct('hebei','12@qq.com','male') from dual;
(struct类型 不能轻易insert,必须字段名为:col1,col2,col3....)
4.load复杂类型
load data inpath '....' into table emp01;
load的时候注意原文件的分隔符等因素
5.访问复杂类型
select id, name[0], score['all'] , score['语文'], addr.province from demo;
17.Hive文件格式及压缩格式
1.默认文件格式:textfile 面向行:txt,seq,面向列:rc,orc
2.压缩格式:可切分:lzo,bz2 不可切分:snappy,gzip
3.查看hive/hadoop中内置编码,解码
set io.compression.codes;
18.压缩优缺点:
优点:减少占用磁盘的空间,减小磁盘或者网络i/o,从而提高吞吐量和i/o性能
缺点:增加cup开销
19.HQL DDL
1.输入规范:
CREATE, DROP, ALTER
DESC <表名>;(DESCRIBE <表名>; 的简写)
DESC FORMATTED <表名>;
SHOW CREATE TABLE <表名>;
2.修改表结构时,只是修改的结构,数据是不会变的,这里hive与MySQL不同,要注意
3.根据某表结构创建另外一张表
CREATE TABLE 表1名 LIKE 表2名
INSERT INTO 表2名 SELECT * FROM 表1名;
4.修改表的名称
ALTER TABLE 表旧名 RENAME TO 新名;
5.给表添加字段
ALTER TABLE 表名 ADD COLUMNS (字段名 字段类型);
6.修改表的字段
ALTER TABLE my_tbl_2 REPLACE COLUMNS (name string);
ALTER TABLE my_tbl_2 REPLACE COLUMNS (id int, name string);
ALTER TABLE my_tbl_2 REPLACE COLUMNS (id int, age int, salary double);
ALTER TABLE my_tbl_2 REPLACE COLUMNS (id int, name string, salary double);
ALTER TABLE my_tbl_2 CHANGE COLUMN id my_id int;
ALTER TABLE my_tbl_2 CHANGE COLUMN id id int AFTER age;
ALTER TABLE my_tbl_2 CHANGE COLUMN id id int FIRST;
7.字段名是乱码的问题:
因为Hive的元数据MySQL设置是latin。。。。
8.建表模板(默认参数):
create [external] table [if not exists] 表名 (
字段名 字段类型,
字段名 字段类型
)
comment 表注