1,把操作hive的sql写在sh脚本里,用 bin/hive -f 执行脚本,不用登陆hive命令行界面,这样可以脚本自动化执行某些任务
2,expect脚本
先安装expect插件
yum -y install expect
#!/bin/expect
spawn beeline
set timeout 5
expect "beeline>"
send "!connect jdbc:hive2://node3:10000\r"
expect "Enter username for jdbc:hive2://node3:10000:"
send "root\r"
expect "Enter password for jdbc:hive2://node3:10000:"
send "123456\r"
interact
3,hive强制删除数据库,包含数据库下面的表一起删除,加关键字cascade
drop database myhive2 cascade;
4,hive内外部表的区别
内部表删除时会删除元数据和真实数据;
外部表删除时会删除元数据,不会删除真实数据;
5,hive默认分隔符是\001
6,如何将hdfs中的现有数据转由hive操作
根据hdfs中数据结构创建表,指定分隔符(row format delimited fields terminated by '\t'
),然后将已有数据复制到hive在hdfs中对应的表目录下
7,创建内部表 加载数据
创建表之后,通过insert插入,或者把文件导入到表对应的hdfs目录下
8,创建外部表,加载数据
8.1 load data
创建表之后用load data 命令将数据从文件系统导入到表中;
# 从linux文件系统加载数据,相当于把数据copy/put到hdfs
load data inpath '/hivedatas/student.csv' overwrite into table student;
# 从hdfs加载数据,相当于把数据从一个hdfs文件目录剪切到另一个文件目录
load data local inpath '/hivedatas/student.csv' overwrite into table student;
通过load data加载的数据,会在响应的表目录下创建文件;
8.2 location指定数据文件位置
内外部表都可以通过location指定文件位置,不同的是内部再删表时一定会将表对应的hdfs目录删掉,而外部表不会删除hdfs数据
create table teacher_inner(tid string,name string) row format delimited fields terminated by '\t' location '/hivedatas';
9,hive集合元素分隔符
如果有多个集合字段,每个字段分隔符不一致,要统一分隔符,即hive一个表只能指定一个分隔符;
分隔符只能是一个字符,比如’##'不能用作分隔符,要么在入表之前处理为单字符分隔符,要么重选TextInputFormat,在建表时指定该类。
10,分桶
分桶就是MapReduce的分区,将一个大文件分到多个小文件
向分桶表加载数据时需要先把所有数据加载到一张中间表,然后再加载到分桶表。
应用:抽样,提高join
11,加载数据
insert into t values
load data
location
Insert overwrite table t_user_order_wide partition(dt='2020-04-12') select
11.1区分insert into 和 insert overowrite:
#insert into 语句
insert into table account select id,age,name from account_tmp;
#insert overwrite语句
insert overwrite table account2 select id,age,name from account_tmp;
11.2两者的区别:
insert overwrite 会覆盖已经存在的数据。
insert into 只是简单的插入,不考虑原始表的数据,直接追加到表中,最后表的数据包括原始数据和新插入。
12,union all 和 join的区别
13,hive排序时只能有一个reduce
14,sort by对每一个reduce的结果排序,结果是局部有顺序;order by对一个reduce进行排序,结果是整体有序;
15,sort by 和distributed by
这两个通常是配合在一起用
distributed by是分区
select * from score distribute by sid sort by sscore;
16,cluster by
cluster by id 相当于 sort by id distributed by id
对同一个字段进行分区和分区内排序,而且只能升序排序;
17,设置本地模式
SET hive.exec.mode.local.auto=true;
18,hive parse_url
19,自定义函数
20,hive行储存和列储存的区别
在建表时选择储存方式,列存储的加载数据方式不能是load data,必须是insert into,所以需要中间表,把数据load到中间表,然后insert into 到列存储表。
列存储用orc,空间小,文件压缩比:
查询速度也是orc最快,所以建表最好用orc格式存储
21,hive建表时选择储存方式和压缩方式
22,hive优化
22.1 数据量小,开启本地模式
22.2 空key转换
进一步优化
3,某些场景下,开启hadoop combiner
4,开启多个job,避免一个reduce承担过多任务
5,并行模式
6,严格模式:笛卡尔积必须加on条件
22,服务器上报自定义的mr出现两个错误
1,input路径写错
2,hadoop jar 执行的jar应该在当前目录下
3,JobMain方法没有调用job.setJar()
23,hbase高可用搭建
在hbase/conf 新增backup-masters文件