重点掌握
1、完成Hive的安装
2、掌握Hive的系统架构
3、掌握Hive的元数据
4、掌握Hive的DDL语法操作(有时间反复练习)
5、掌握Hive中表的创建及操作理解内部表和外部表的区别
6、掌握分区表和分桶表的区别和应用
7、掌握表数据的导入导出理解内容
1、Hive的技术介绍和原理 -01
2、Hive的优缺点 -02
mv apache-hive-3.1.2-bin /opt/yjx
295 rm -rf /opt/yjx/hadoop-3.1.2/share/hadoop/common/lib/guava-*.jar
296 rm -rf /opt/yjx/hadoop-3.1.2/share/hadoop/hdfs/lib/guava-*.jar
297 cp /opt/yjx/apache-hive-3.1.2-bin/lib/guava-*.jar /opt/yjx/hadoop-3.1.2/share/hadoop/common/lib/
298 cp /opt/yjx/apache-hive-3.1.2-bin/lib/guava-*.jar /opt/yjx/hadoop-3.1.2/share/hadoop/hdfs/lib/
299 vim /etc/profile
300 scp /etc/profile root@node02:/etc/profile
301 scp /etc/profile root@node03:/etc/profile
302 source /etc/profile
303 scp /opt/yjx/hadoop-3.1.2/etc/hadoop/core-site.xml root@node02:/opt/yjx/hadoop-3.1.2/etc/hadoop/
304 scp /opt/yjx/hadoop-3.1.2/etc/hadoop/core-site.xml root@node03:/opt/yjx/hadoop-3.1.2/etc/hadoop/
305 hsitory
306 history
307 zkServer.sh start
308 zkServer.sh status
309 zkServer.sh start
310 zkServer.sh status
311 start-all.sh
312 zkServer.sh start
313 zkServer.sh status
314 jps
315 schematool -dbType mysql -initSchema
316 hive --service metastore
317 schematool -dbType mysql -initSchema
318 vim /opt/yjx/hadoop-3.1.2/etc/hadoop/core-site.xml
319 cd /opt/yjx/apache-hive-3.1.2-bin/conf
320 vim hive-site.xml
321 zkServer.sh status
322 start-all.sh
323 schematool -dbType mysql -initSchema
Hive是基于 Hadoop 的一个【数据仓库工具】,可以将结构化和半结构化的数据文件映射为一张数据库表,并提供简单的 sql 查询功能
Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更近一步可以说hive就是一个MapReduce客户端

使用Hive的原因
Hive的特点
Hive优缺点
优点
缺点
Hive的HQL表达能力有限
(1)迭代式算法无法表达
(2)数据挖掘方面不擅长
Hive的效率比较低
(1)Hive自动生成的MapReduce作业,通常情况下不够智能化
(2)Hive调优比较困难,粒度较粗
Hive和传统数据库对比

Hive的应用场景

Hive允许client连接方式有三个,CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)。JDBC访问中间件Thrift软件矿建,跨语言服务开发。DDL DQLDML,整体仿写一套SQL语句。
client–需要下载安装包
JDBC/ODBC 也可以连接到Hive
Web Gui
元数据,包括表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。
元数据存储在数据库中,默认存在自带的derby数据库(单用户局限性)中 ,推荐使用Mysql进行存储。
Hive的数据存储在HDFS中,计算由MapReduce完成。HDFS和MapReduce是源码级别上的整合,两者结合最佳。解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。
| 节点\功能 | metastore | hiveserver2 | client |
|---|---|---|---|
| node01 | √ | √ | |
| node02 | √ | ||
| node03 | √ |
使用 -e 参数来直接执行hql的语句
使用 –f 参数通过指定文本文件来执行hql的语句
保存退出
特点:执行完sql后,回到linux命令行。
Hive元数据库中一些重要的表结构及用途,方便Impala、SparkSQL、Hive等组件访问元数据库的理解。
创建数据库
创建数据库同时指定位置
修改数据库
用户可以使用ALTER DATABASE命令为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。
数据库详细信息
删除数据库
| 类型 | Java数据类型 | 描述 |
|---|---|---|
| TINYINT | byte | 8位有符号整型。取值范围:-128~127。 |
| SMALLINT | short | 16位有符号整型。取值范围:-32768~32767。 |
| INT | int | 32位有符号整型。取值范围:-2 31 ~2 31 -1。 |
| BIGINT | long | 64位有符号整型。取值范围:-2 63 +1~2 63 -1。 |
| BINARY | 二进制数据类型,目前长度限制为8MB。 | |
| FLOAT | float | 32位二进制浮点型。 |
| DOUBLE | double | 64位二进制浮点型。 |
| DECIMAL(precision,scale) | 10进制精确数字类型。precision:表示最多可以表示多少位的数字。取值范围: 1 <= precision <= 38 。scale:表示小数部分的位数。取值范围: 0 <= scale <= 38 。如果不指定以上两个参数,则默认为 decimal(10,0) 。 | |
| VARCHAR(n) | 变长字符类型,n为长度。取值范围:1~65535。 | |
| CHAR(n) | 固定长度字符类型,n为长度。最大取值255。长度不足则会填充空格,但空格不参与比较。 | |
| STRING | string | 字符串类型,目前长度限制为8MB。 |
| DATE | 日期类型,格式为yyyy-mm-dd 。取值范围:0000-01- 01~9999-12-31。 | |
| DATETIME | 日期时间类型。取值范围:0000-01-01 00:00:00.000~9999-12-31 23.59:59.999,精确到毫 秒。 | |
| TIMESTAMP | 与时区无关的时间戳类型。取值范围:0000-01-01 00:00:00.000000000~9999-12-31 23.59:59.999999999,精确到纳秒。说明 对于部分时区相关的函数,例如cast( as string) ,要求TIMESTAMP按照与当前时区相符的方式来展现。 | |
| BOOLEAN | boolean | BOOLEAN类型。取值:True、False。 |
| 类型 | 定义方法 | 构造方法 |
|---|---|---|
| ARRAY | array``array<struct<a:int, b:string>> | array(1, 2, 3)``array(array(1, 2), array(3, 4)) |
| MAP | map<string, string>``map<smallint, array> | map(“k1”, “v1”, “k2”, “v2”)``map(1S, array(‘a’, ‘b’), 2S, array(‘x’, ‘y’)) |
| STRUCT | struct<x:int, y:int>``struct<field1:bigint, field2:array, field3:map<int, int>> | named_struct(‘x’, 1, ‘y’, 2)``named_struct(‘field1’, 100L, ‘field2’, array(1, 2), ‘field3’, map(1, 100, 2, 200)) |
Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。
创建表
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[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]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
字段解释说明:
创建表案例:根据数据创建表结构
案例一:简单用户信息
use.txt文件(表信息)
1,admin,123456,男,18
2,zhangsan,abc123,男,23
3,lisi,654321,女,16
创建表
create table t_useraaa(
id int,
uname string,
pwd string,
gender string,
age int
)
row format delimited fields terminated by ','
lines terminated by '\n';
加载表
--载入数据代码
load data inpath '/yjx/user.txt' into table t_user;
案例二:复杂人员数据
person.txt文件
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui longguan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing
创建表并载入表
create table IF NOT EXISTS t_person(
name string,
friends array<string>,
children map<string,int>,
address struct<street:string ,city:string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
--载入数据代码
load data inpath '/yjx/person.txt' into table t_person;
显示表
show tables;
show tables like 'u';
desc t_person;
desc formatted t_person;
重命名
内部表(同时修改文件目录)外部表(因为目录是共享的,所以不会修改目录名称)
修改列
删除表