赞
踩
一、Hive的介绍及其设计原理
1、Hive的设计目标及诞生
2、Hive的功能
3、Hive的设计原理
存储:将HDFS文件映射成表的数据
计算:将SQL变成了MapReduce的程序
转换的过程
tbname:emp员工表
empno empname salary detpno
select empno,salary from emp where salary > 200 select deptno,max(salary) from emp group by deptno order by || Input: 1-要从Hive的元数据中获取emp这张表所对应的HDFS文件地址 2-读取这个地址对应的所有文件 Map: 1-实现过滤【判断字段个数是否合法行的过滤、列的过滤】 salary > 200 2-分割每一条数据,返回对应的两列,获取元数据中该表的字段个数及分隔符【empno-0,salary-2】 empno,salary 3-输出这两列 Shuffle: key:deptno value:salary 分组:deptno 相同部门的所有薪资在一个迭代器中 Reduce:聚合函数 reduce(deptno,values{所有薪资}){ context.write(deptno,max(values)) } Ouptut: * 元数据 * 记录着表与文件的映射关系 * 表的信息:有哪些字段、分隔符【本质上还是文件】 * 计算:底层是一个MapReduce模板,将SQL解析以后得到每个参数,通过参数传递给MapReduce程序
4、Hive的架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vvGl0xW6-1619417522995)(Day43_20200116_大数据仓库Hive入门.assets/image-20200116114756594.png)]
## 二、Hive的部署及测试
地址:hive.apache.org
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t0z0T9vH-1619417522999)(Day43_20200116_大数据仓库Hive入门.assets/image-20200116115527133.png)]
下载解压:由于选择了CDH,只要找到CDH版本对应的Hive版本即可,不用考虑兼容性
cd /export/software/
tar -zxvf hive-1.1.0-cdh5.14.0.tar.gz -C /export/servers/
修改配置
/export/servers/hive-1.1.0-cdh5.14.0/conf
启动测试
注意:Hive或者SparkSQL
官方安装文档中注意事项
3、测试
三、Hive的元数据管理及客户端
1、元数据的功能
2、元数据的管理
3、MetaStore元数据管理服务
为什么需要该服务:以后很多SQL的分布式计算工具需要访问元数据,统一化的访问管理
配置MetaStore元数据管理服务
注意启动顺序发生改变
如果一旦配置了MetaStore服务,整个Hive一定要先启动MetaStore
bin/hive --service metastore
#检测是否真正启动成功
netstat -atunlp | grep 9083
第二个启动Hive服务端
hiveserver2:这是Hive的服务端
启动
bin/hiveserver2
#检测是否真正启动成功
netstat -atunlp | grep 10000
第三个启动Hive客户端
启动beeline即可
4、客户端
四、Hive的DDL与DML
1、官网语法手册
2、DDL
查看:show databases;
创建
官方:
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, …)];
实际:
CREATE DATABASE [IF NOT EXISTS] DB_NAME [LOCATION hdfs_path]
LOCATION:所有Hive中的数据库默认会有一个hdfs对应的目录,如果不存在会自动/user/hive/warehouse目录下创建,该选项可以自定义,手动指定某个hdfs目录作为数据库目录
create database if not exists testdb location '/testdb';
删除
DROP DATABASE [IF EXISTS] database_name [CASCADE];
drop database if exists testdb; //只能删除空数据库
drop database if exists testdb cascade; //慎用
切换
use db_name;
描述
desc database wordcount;
官方语法 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later) [(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)] ON ((col_value, col_value, ...), (col_value, col_value, ...), ...) [STORED AS DIRECTORIES] [ [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later) ] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later) [AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables) CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name LIKE existing_table_or_view_name [LOCATION hdfs_path]; * ```sql create [EXTERNAL] table [if not exists] tbname( col1 type1, col2 type2, …… ) [PARTITIONED BY col] --按照哪个字段进行分区 [CLUSTERED BY col into N buckets] --按照哪个字段进行分桶 [ROW FORMAT ] --指定行和列的分隔符 lines terminated by '\n' --指定行的分隔符,默认为\n row format delimited fields terminated by '\001' --指定列的 分隔符,默认为\001 [STORED AS file_format] --指定表中数据文件的类型,默认为textfile,可选:orc/parquet等 [LOCATION hdfs_path] --手动指定表所在的hdfs的目录 注意:Hive中的SQL语句不能包含制表符 ``` * 测试: * 创建数据库 ``` create database if not exists db_emp; use db_emp; ``` * 创建表 * 员工表:tb_emp ```SQL create table tb_emp( empno string, ename string, job string, managerno string, hiredate string, salary double, jiangjin double, deptno string ) row format delimited fields terminated by '\t'; ``` * 部门表:tb_dept ```SQL create table tb_dept( deptno string, dname string, location string ) row format delimited fields terminated by ','; ``` * 加载数据 * 员工表: ```SQL load data local inpath '/export/datas/emp.txt' into table tb_emp; local:表示加载本地数据,原理实际上是将本地文件上传到了表的目录下 不加local:表示加载hdfs数据,原理实际上将hdfs上的文件移动到表的目录下 ``` * 部门表 ```SQL load data local inpath '/export/datas/dept.txt' into table tb_dept; ```
第二种方式【常用】:子查询的方式
功能:将SQL语句的结果进行保存
语法:将select语句的结果保存未一张表
create table if not exists tb_name as select ……
测试
create table tb_emp_as as select empno,ename,salary,deptno from tb_emp;
查看表的结构
select * from tb_emp_as;
第三种方式【很少用】
功能:复制一个已存在的表的表结构,不复制数据,构建一张新的表
语法
create table tb_emp_like like exists_tb_name;
测试
select * from tb_emp_like;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。