【Hive】概念、安装、数据类型、DDL、DML操作、查询操作、函数、压缩存储、分区分桶、实战Top-N、调优(fetch抓取)、执行计划
一、概念
1、介绍
基于Hadoop的数据仓库工具,将结构化数据映射为一张表,可以通过类SQL方式查询
本质:将HQL转换成MapReduce程序

Hive中具有HQL对应的MapReduce模板
存在:HDFS,分析的底层是MapReduce,程序运行在yarn上
2、优缺点
HQL快速开发、适用于数据分析等实时性不高的场景、支持自定义函数、擅长大数据
表达能力有限、效率低、延迟性高
3、架构原理

驱动器:解析器(SQL转为抽象语法树)、编译器(生成逻辑执行计划)、优化器、执行器(逻辑转为物理)
4、和数据库比较
数据更新(数据仓库)、执行延迟(无索引+MR的高延迟)、数据规模
二、Hive安装
1、Hive安装
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
2、MySQL的安装与配置
3、Hive安装部署:配置环境变量
4、元数据配置到MySQL:
拷贝MySQL驱动、配置Metastore到MySQL
5、安装Hive的Tez引擎
将多个有依赖的作业转换为一个作业,只需写一次HDFS,提高计算性能
6、启动Hive
初始化元数据库
启动metastore和hiveserver2
HiveJDBC访问
7、其他命令操作
退出、查看hdfs文件系统、查看输入的历史命令
8、常见属性配置
运行日志信息配置
参数配置(配置文件hive-site.xml、命令行参数bin/hive -hiveconf、参数声明SET)
三、Hive数据类型
1、基本数据类型
TINYINT
SMALINT
INT
BIGINT
BOOLEAN
FLOAT
DOUBLE
STRING
TIMESTAMP
BINARY--字节数组
2、集合数据类型
STRUCT--结构体,用.访问
MAP
ARRAY

3、类型转换
隐式类型转换、CAST('1' AS INT)显式类型转换
四、DDL数据定义
1、创建数据库,可以指定位置
create database db_hive2 location '/db_hive2.db';
2、查询数据库
显示、查看数据库及详情、切换当前数据库
3、修改数据库
属性、位置等
4、删除数据库
空数据库/cascade强制删除
5、创建表
(2)EXTERNAL关键字可以让用户创建一个外部表,在建表的同时可以指定一个指向实际数据的路径(LOCATION),在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
(3)COMMENT:为表和列添加注释。
(4)PARTITIONED BY创建分区表
(5)CLUSTERED BY创建分桶表
5.1默认创建管理表(内部表),数据存储在hive.metastore.warehouse.dir
根据结果创建表:create table if not exists student3 as select id, name from student;
根据表结构创建表:create table if not exists student4 like student;
查询表的类型: desc formatted student2;
5.2 外部表
收集到的网站日志定期流入HDFS文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储
上传数据:dfs -put /opt/module/datas/student.txt /student;
建表语句+location '/student';
5.3 相互转换
alter table student2 set tblproperties('EXTERNAL'='TRUE');
6、修改表
增删改分区、增删改列信息
7、删除表
drop table dept_partition;
五、DML数据操作
1、数据导入
表中装载数据、通过查询语句插入数据、创建表及加载数据
通过Location指定加载数据路径
Import数据到指定Hive表中
2、数据导出
导出到本地/hdfs
Hive Shell 命令导出:bin/hive -e
导出到HDFS
Sqoop导出
清空数据truncate
六、查询
1、操作
limit限制行数
RLIKE子句使用正则表达式匹配条件
select * from emp where sal RLIKE '[2]';
2、分组
3、join语句
4、排序
分区排序(Distribute By)
Cluster By
5、抽样查询
select * from stu_buck tablesample(bucket 1 out of 4 on id);
七、函数
1、系统内置函数
显示用法:desc function upper;
2、常用内置函数
行转列concat、列转行EXPLODE
空字段赋值NVL( value,default_value)
case sex when '男' then 1 else 0 end
窗口函数(开窗函数):sum累加
RANK排序
日期函数:select current_date();
3、自定义函数UDF:user-defined function
一进一出
一进多出
多进一出
4、自定义UDF函数
上传jar包,执行调用
create temporary function mylower as "com.atguigu.hive.Lower";
八、压缩存储
1、压缩配置
方式、参数配置
2、Map输出阶段压缩(MR引擎)
set mapreduce.map.output.compress=true;
也可以设置压缩方式
3、开启Reduce输出阶段压缩
set hive.exec.compress.output=true;
4、文件存储格式
列式存储和行式存储
TextFile默认不压缩
Orc
Parquet二进制存储,文件是自解析的
5、存储和压缩结合
建表时压缩stored as orc
hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy,lzo。
九、Hive实战
1、统计各种TopN指标
十、分区表和分桶表
1、分区表
分区就是分目录
CRUD分区
二级分区表的数据加载和查询
动态分区调整
2、分桶表
决定数据放入哪个桶
对分桶字段的值进行哈希,然后除以桶的个数求余
十一、企业调优
1、Fetch抓取
set hive.fetch.task.conversion=more;
不必使用MapReduce计算
2、表的优化
数据量小的表放在join的左边
合理设置MR数量
3、JVM重用
4、查看执行计划
explain extended select * from emp;
【Hive】概念、安装、数据类型、DDL、DML操作、查询操作、函数、压缩存储、分区分桶、实战Top-N、调优(fetch抓取)、执行计划的更多相关文章
- Hive 实战(2)--hive分区分桶实战
前言: 互联网应用, 当Mysql单机遇到性能瓶颈时, 往往采用的优化策略是分库分表. 由于互联网应用普遍的弱事务性, 这种优化效果非常的显著.而Hive作为数据仓库, 当数据量达到一定数量时, 查询 ...
- Hive数据据类型 DDL DML
Hive的基本数据类型 DDL DML: 基本数据类型 对于Hive而言String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以 ...
- 第4节 hive调优:1、2、fetch抓取和表的优化
hive的调优:第一个调优:fetch抓取,能够避免使用mr的,就尽量不要用mr,因为mr太慢了 set hive.fetch.task.conversion=more 表示我们的全局查找,字段查找, ...
- 大数据入门第十一天——hive详解(二)基本操作与分区分桶
一.基本操作 1.DDL 官网的DDL语法教程:点击查看 建表语句 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data ...
- MySql用statement实现DDL,DML,DQL的操作Demo
Demo1 Connection connection=null; Statement stmt=null; int result=-1; try { Class.forName("com. ...
- Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句
我用的数据库是MySQL,实体类叫User public class User { private Integer uid; private String username; private Stri ...
- hive分区分桶
目录 1.分区 1.1.静态分区 1.1.1.一个分区 1.1.2.多个分区 1.2.动态分区 2.分桶 1.分区 如果一个表中数据很多,我们查询时就很慢,耗费大量时间,如果要查询其中部分数据该怎么办 ...
- Hive调优
Hive存储格式选择 和Hive 相关优化: 压缩参考 Hive支持的存储数的格式主要有:TEXTFILE .SEQUENCEFILE.ORC.PARQUET. 文件存储格式 列式存储和行式存储 行存 ...
- 【Hive六】Hive调优小结
Hive调优 Hive调优 Fetch抓取 本地模式 表的优化 小表.大表Join 大表Join大表 MapJoin Group By Count(Distinct) 去重统计 行列过滤 动态分区调整 ...
- Hive(八)Hive的Shell操作与压缩存储
一.Hive的命令行 1.Hive支持的一些命令 Command Description quit Use quit or exit to leave the interactive shell. s ...
随机推荐
- nginx干货文档
文档地址:https://files.cnblogs.com/files/sanduzxcvbnm/跟冰河学习Nginx技术.pdf
- OpenJudge 1.5.35:求出e的值
35:求出e的值 总时间限制:1000ms 内存限制:65536kB 描述 利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e . 输入 输入只有一行,该行包 ...
- STM32F10x SPL V3.6.2 集成 FreeRTOS v202112
STM32F10x SPL 集成 FreeRTOS 在整理 GCC Arm 工具链的Bluepill代码示例, 常用外设都差不多了, 接下来是 FreeRTOS, 网上查到的基本上都是基于旧版本的集成 ...
- Node.js(五)学生管理CRUD
npm init -y(初始化项目) npm install express(引入express) npx express-generator -e(自动生成模板.添加对 ejs 模板引擎的支持) n ...
- vue中的v-if查找数组中最后一个,给他加上新的样式
vue: var app=new Vue({ el:".xiaomi", data: { typeInfo: [{img:"image/type/phone_1.webp ...
- 关于Redhat-7.x-下docker的安装记录
今天因公司项目,需要部署docker环境,能根据指定的镜像创建容器 于是首先就得先部署docker环境,过程记录如下: 在Redhat 7.x - (aws上的Redhat) 环境下部署过程 1.安装 ...
- HDU3506 Monkey Party (区间DP)
一道好题...... 首先要将环形转化为线形结构,接着就是标准的区间DP,但这样的话复杂度为O(n3),n<=1000,要超时,所以要考虑优化. dp[i][j]=min( dp[i][k]+d ...
- 内存映射IO(MMIO)
端口I/O 介绍: 一种I/O编址方式是端口映射I/O(port-mapped I/O), CPU使用专门的I/O指令对设备进行访问, 并把设备的地址称作端口号. 在执行其中的一条指令时,CPU使用地 ...
- Netty 学习(十):ChannelPipeline源码说明
Netty 学习(十):ChannelPipeline源码说明 作者: Grey 原文地址: 博客园:Netty 学习(十):ChannelPipeline源码说明 CSDN:Netty 学习(十): ...
- Tomcat实战之路
目录 第一节.安装升级 1.1.linux初始化 1.2.安装 1.3.升级 第二节.配置 2.1.虚拟主机 2.2.默认网站首页路径 2.3.跳转 2.4.配置Tomcat日志 第三节.安全 3.1 ...