大数据小细节、小经验

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文件

24,hbase体系结构

在这里插入图片描述

25,store是对表的垂直划分,region是对表的水平划分
26,hbase适合写多读少的场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值