一、hive 安装
下载jar包,安装配置
二、Hive架构图
三、Hive常用命令
DDL数据定义
1、查看数据库
show databases;
2、创建数据库
create database if not exists hive_db;
3、创建库指定hdfs路径
create database hive_db2 location '/hive_db2'
4、创建表
如果指定了hdfs路径,创建的表在这个路径
5、 查看数据库结构
desc database hive_db;
6、添加额外的描述信息
alter database hive_db set dbproperties('created'='hunter')
注意:查询需要使用desc database extended hive_db;
7 、查看指定的通配符
show database like 'i*';
8、删除空库
drop databse hive_db cascade ;
9)删除非空库
drop database if exists hive_db cascade ;
管理表
默认不加external创建的就是管理表,也称为内部表
MANAGED_TABLE 管理表
Table Type :MANAGE_TABLE
查看表类型:
desc formatted itstar;
外部表
EXTERNAL_TABLE 外部表
创建方式 :
create external table student(id int, name string)
区别:
如果是管理表删除hdfs中的数据删除,如果是外部表删除hdfs数据不删除
Hive命令
1)不登录hive客户端直接输入命令操作
bin/hive -e "select * from itstar"
2)直接把sql写入到文件中 hived.sql 有select * from itstar
bin/hive -f /root/hived.sql
3)查看hdfs 文件
dfs -ls /
4)查看历史操作
cat ~/.hivehistory
四、Hive导入数据到hdfs hdfs导出到本地
从hdfs上导入数据
load data inpath ‘hafd_file_path’ into table tbname;
应用场景:使用与大数据的存储
加载分布式系统里的数据做如下操作:
create table dep(id int ,name string) row format delimited fields terminated by '\t';
load data local inpath '/home/test/student.txt' into table hive.dep;
select * from dep;
五、Hive分区与分桶
分区分的是文件夹,分桶分的是文件,分桶其实就是把大表化成了“小表”
数据分桶的作用:
好处:
1、方便抽样
2、提高join查询效率
所谓分区,这是将满足某些条件的记录打包,做个记号,在查询时提高效率,相当于按文件夹对文件进行分类,文件夹名可类比分区字段
分区的目的就是提高查询效率
分桶是相对分区进行更细粒度的划分
1)创建分桶表
create table emptable_buck(id int , name string ) Cluster by(id) into 4 buckets
row format
delimited fields
terminated by '\t' ;
用户需要统计一个具有代表性的结果时,并不是全部结果!
抽样! 统计学
1、创建分区表
create table dept_partitions()
partition by ()
row format
delimited fields
terminated by '\t' ;
六、Hive Sql 与 自定义UDF 函数
基础查询:
select * from table; 全表查询
select itstar.id,itstar.name from table; 指定列
1)指定列查询
select itstar.name from itstar;
2)指定列查询设置别名
select itstar.name as myname from itstar;
3)创建员工表
4)查询员工姓名和工资(每个员工加薪1000块)
select emptable.ename,emptable.sal+1000 salmoney from hive_db.em ptable;
5)查看公司有多少员工
select count(1) empnumber from emptable;
6)查询工资最高的工资
select max(sal) from emptable;
7)查询工资最小的工资
select min(sal) from emptable;
8)求工资总和
select sum(sal) sal_sum from emptable;
9)求平均值
select avg(sal) sal_avg from emptable;
10) 查询结果只显示前多少条
select * from emptable limit 10
11)where语句
作用:过滤
使用:where子句紧接着from
求出工资大于1300的员工
select * from emptable where sal>1300
求出工资在1300~3000的员工 select * from emptable where sal>1300 and sal<3000
或是
select * from emptable where sal between 1300 and 3000
select from emptable where sal in(2000,3000) in 表示范围
12) is null 与 is not null
空与非空的过滤
select * from emptable where comm is not null
13)like
模糊查询
使用:通配符
% 后面代表0或多个字符
select * from emptable where sal like ‘1%’;
查询工资第2位数字为1的员工信息
select * from emptable where sal like ‘_1%’;
_ 代表一个字符
查询工资中有5的员工信息
select * from emptable where sal like ‘%5%’;
14)And / Not / Or
查询部门号为30并且工资大于1000的员工信息
select * from emptable where no=30 and sal > 1000 ;
查询部门号为30或工资大于1000的员工信息
select * from emptable where no=30 or sal > 1000 ;
查询工资不在2000-3000的员工信息
select * from emptable where sal not in (2000,3000);
15)分组操作
group by
通常和一些聚合函数一起使用
求每个部门的平均工资?
select avg(sal) avg_sal, deptno from emptable group by deptno;
where 不可以有聚合函数
having 可以用聚合函数
group by 分组
求部门平均工资大于2000的部门?
select deptno, avg(sal) avg_sal from emptable group by deptno having avg_sal > 2000 ;
七、Hive压缩
在Hadoop集群中,有大量的数据复制和移动操作,压缩过后可以减少文件的大小,从而可以减少
磁盘和网络的I/O
八、Hive数据类型
九、Hive优化原则
1、设计一个好的模型,因为一个好的模型能够做到事半功倍。
2、从数据倾斜问题来考虑,可以采取有效措施解决数据倾斜问题。
3、尽量减少job的个数,能用一个job完成的,就坚决不用两个job。
4、设置合理的map reduce的task个数,可以有效地提升性能。
5、了解数据的分布,自己动手解决数据的倾斜是个不错的选择
6、对于数据量较大的时候,要慎用count(distinct),因为容易产生数据倾斜。
7、对小文件进行合并,是一种比较行之有效提高效率的方法。
8、在优化时,要注意把握整体最优原则。